每次我调用 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 标头?但它似乎不完整,我正在寻找完整的示例。
使用下面的代码
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);
}