WCF 以编程方式设置标头

问题描述 投票:0回答:1

每次我调用 wcf 服务时,我都需要以编程方式设置标头, 在我的示例中,我必须设置身份节点的所有节点(Identity、AppName、AppKey、UserId、IdentityProvider)

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://.../services">
   <soapenv:Header>
<Identity xmlns="http://.../">
<AppName>test1</AppName>
<AppKey>test2</AppKey>
<UserId>test3</UserId>
<IdentityProvider>test4</IdentityProvider>
</Identity>
</soapenv:Header>
   <soapenv:Body>

我已阅读这篇文章如何向每个 WCF 调用添加自定义 HTTP 标头?但它似乎不完整,我正在寻找完整的示例。

wcf .net-core
1个回答
0
投票

使用下面的代码

 MessageHeader myHeader0 = MessageHeader.CreateHeader(
        "Identity", "http:asd.com", "");
 MessageHeader myHeader1 = MessageHeader.CreateHeader(
        "AppName","" , "test1");
 MessageHeader myHeader2 = MessageHeader.CreateHeader(
       "AppKey", "", "test2");
 MessageHeader myHeader3 = MessageHeader.CreateHeader(
       "UserId", "", "test3");
 MessageHeader myHeader4 = MessageHeader.CreateHeader(
      "IdentityProvider", "", "test4");
 OperationContext.Current.OutgoingMessageHeaders.Add(myHeader0);
 OperationContext.Current.OutgoingMessageHeaders.Add(myHeader1);
 OperationContext.Current.OutgoingMessageHeaders.Add(myHeader2);
 OperationContext.Current.OutgoingMessageHeaders.Add(myHeader3);
 OperationContext.Current.OutgoingMessageHeaders.Add(myHeader4);

如果是响应对象,则在WCF的接口代码中添加:

public class Service1 : IService1
{
    public string GetData(int value)

{
    MessageHeader myHeader0 = MessageHeader.CreateHeader(
           "Identity", "http:asd.com", "");
    MessageHeader myHeader1 = MessageHeader.CreateHeader(
           "AppName","" , "test1");
    MessageHeader myHeader2 = MessageHeader.CreateHeader(
          "AppKey", "", "test2");
    MessageHeader myHeader3 = MessageHeader.CreateHeader(
          "UserId", "", "test3");
    MessageHeader myHeader4 = MessageHeader.CreateHeader(
         "IdentityProvider", "", "test4");
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader0);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader1);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader2);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader3);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader4);

    return string.Format("You entered: {0}", value);
}

如果是请求对象,则在客户端调用中添加以下代码:

WS.ServiceClient myclient = new WS.ServiceClient();

 
using (OperationContextScope scope=new OperationContextScope(myclient.InnerChannel))
        {
            MessageHeader myHeader0 = MessageHeader.CreateHeader(
           "Identity", "http:asd.com", "");
    MessageHeader myHeader1 = MessageHeader.CreateHeader(
           "AppName","" , "test1");
    MessageHeader myHeader2 = MessageHeader.CreateHeader(
          "AppKey", "", "test2");
    MessageHeader myHeader3 = MessageHeader.CreateHeader(
          "UserId", "", "test3");
    MessageHeader myHeader4 = MessageHeader.CreateHeader(
         "IdentityProvider", "", "test4");
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader0);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader1);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader2);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader3);
    OperationContext.Current.OutgoingMessageHeaders.Add(myHeader4);
    myclient.GetData(1); 
    }
© www.soinside.com 2019 - 2024. All rights reserved.