0

我正在尝试从 C# 中的控制台连接到肥皂服务(wsdl)。我的代码相当简单,我将 wsdl 作为服务引用添加到项目中,并且按预期创建了代理类(?)。

该服务对每条消息使用一个身份验证密钥,我找不到任何地方将其添加到soap标头。作为参考,这是我在 main 方法中运行的代码:

Api.Servicereference1.PortClient object = new Api.Servicereference1.PortClient();                        
object.testmethod();

这篇文章的输出如下:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <testmethod xmlns="http://wsdlserver.com/soap"/>
    </s:Body>
</s:Envelope>

但是,我想要实现的是发送以下消息,并进行身份验证:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Header>
        <s:auth>key</s:auth>
    </s:Header>
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">        
        <testmethod xmlns="http://wsdlserver.com/soap"/>
    </s:Body>
</s:Envelope>

谁能帮助我朝正确的方向前进,至于如何将此自定义标头添加到我的消息中?谢谢。

4

2 回答 2

1

关于如何将自定义标头添加到 WCF 客户端代理的文章:

向每个 WCF 调用添加自定义标头 - 一种解决方案

于 2013-06-25T18:51:23.870 回答
0

好的,感谢您的输入,我做了一些阅读,并认为如果我用OperationContextScope包围我的消息,我可以随意添加标题。我将代码更改为:

Api.Servicereference1.PortClient object = new Api.Servicereference1.PortClient();
using ( OperationContextScope scope = new OperationContextScope(object.InnerChannel))
{
     MessageHeader soapheader = MessageHEader.CreateHeader("name","ns",payload);
     OperationContext.Current.OutgoingMessageHeaders.Add(soapheader);
     object.testmethod();
}

MessageHeader.CreateHeader()中的参数在此处说明MessageHeader.CreateHeader Method (String, String, Object) from msdn.microsoft.com

尽管此解决方案需要我手动将 OperationContext 添加到我的所有消息中,但它为我解决了自定义soapheaders 的问题。

于 2013-06-25T19:48:54.793 回答