gpt4 book ai didi

wcf - 如何在 WCF 中获取自定义 SOAP header 的值

转载 作者:行者123 更新时间:2023-12-04 13:55:35 24 4
gpt4 key购买 nike

我创建了一个自定义的 soap header ,并通过 IClientMessageInspector 将其添加到我的消息中

    public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
var header = new MessageHeader<AuthHeader>();
header.Content = new AuthHeader(Key);
header.Actor = "Anyone";
var header2 = header.GetUntypedHeader("Auth", "xWow");
request.Headers.Add(header2);
return null;
}

[DataContract(Name="Auth")]
public class AuthHeader
{
public AuthHeader(string key)
{
this.Key = key;
}

[DataMember]
public string Key { get; set; }
}

我还有一个 IDispatchMessageInspector,我可以在列表中找到正确的标题。然而,没有任何值(value)。我知道该值正确地通过了线路,因为消息字符串是正确的
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header>
<Auth s:actor="Anyone" xmlns="xWow" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Key xmlns="http://schemas.datacontract.org/2004/07/xWow.Lib">HERE IS MY KEY VALUE!!!!</Key>
</Auth>
<To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:26443/AuthService.svc</To>
<Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IAuthService/GetPayload</Action>
</s:Header>
<s:Body>
<GetPayload xmlns="http://tempuri.org/"/>
</s:Body>
</s:Envelope>

但是似乎没有任何属性可以检索此值。 MessageHeaderInfo 类有 Actor 等,但我找不到其他有用的东西。

在客户端,我必须在 Header 和 Untyped header 之间进行转换,服务器上是否有等效的操作?

我发现了以下内容,它应该可以工作。
request.Headers.FindHeader("Auth", "xWow");
request.Headers.GetHeader<AuthHeader>(index);

如果我手动找到正确的索引并调用第二行,它会按预期工作。然而 FindHeader 返回 -1 作为索引,即使我已经在监视窗口中确认这些是名称和命名空间的正确值。

最佳答案

request.Headers.FindHeader("Auth", "xWow");
request.Headers.GetHeader<AuthHeader>(index);

关于wcf - 如何在 WCF 中获取自定义 SOAP header 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2444615/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com