如何在 WCF 中获取自定义肥皂标题的值 [英] How to I get the value of a custom soap header in WCF

查看:17
本文介绍了如何在 WCF 中获取自定义肥皂标题的值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have created a custom soap header, and added it into my message via 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,我可以在列表中找到正确的标题.但是,没有任何价值.我知道该值正确地通过了线路,因为消息字符串是正确的

I also have an IDispatchMessageInspector, and I can find the correct header in the list. However, there is no value. I know that the value went across the wire correctly, because the message string is correct

<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 等,但我找不到其他有用的东西.

But there does not seem to be any property to retrieve this value. The MessageHeaderInfo class has Actor, etc, but nothing else useful I can find.

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

On the client side I had to convert between Header and Untyped header, is there an equivalent operation on the server?

我发现了以下内容,应该可以.

I found the following, which should work.

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

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

If I manually find the right index and call the second line, it works as expected. However FindHeader is returning -1 as the index, even though I have confirmed in the watch window that those are the correct values for the name and namespace.

推荐答案

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

这篇关于如何在 WCF 中获取自定义肥皂标题的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆