首页 > 解决方案 > 如何将soap标头添加到WCF中的自动生成代理?

问题描述

到目前为止,我正在使用手动方式进行代理,这就是我处理标题的方式:

public abstract class UserClientBase<T> : ClientBase<T> where T : class
{
    public UserClientBase()
    {
        string userName = Thread.CurrentPrincipal.Identity.Name;
        MessageHeader<string> header = new MessageHeader<string>(userName);

        OperationContextScope contextScope =
                        new OperationContextScope(InnerChannel);

        OperationContext.Current.OutgoingMessageHeaders.Add(
                                  header.GetUntypedHeader("String", "System"));
    }
}

public class FooClient : UserClientBase<IFooService>, IFooService
{
    public Foo Test()
    {
        return Channel.Test();
    }
}

我的问题是..如何使用自动生成的代理来做到这一点?, 像这样:

using (FooServiceClient client = new FooServiceClient())
{
    return await client.Test();
}

标签: c#.netwcfsoapheader

解决方案


和你之前做的完全一样。几乎。

Using Client As New FooServiceClient, Scope As New OperationContextScope(Client.InnerChannel)
    Dim Header As New MessageHeader(Of String)(Thread.CurrentPrincipal.Identity.Name)
    OperationContext.Current.OutgoingMessageHeaders.Add(Header.GetUntypedHeader("String", "System"))
    Return await client.Test();
End Using

推荐阅读