在C#控制台中使用Soap服务进行身份验证
我正在尝试从C#中的控制台连接到soap服务(wsdl)。 我的代码相当简单,我将wsdl作为服务引用添加到项目中,代理类(?)按预期创建 该服务对每条消息使用身份验证密钥,我找不到任何地方可以将其添加到soap头中。 作为参考,这是我在主方法中运行的代码:在C#控制台中使用Soap服务进行身份验证,c#,soap,console,wsdl,soap-client,C#,Soap,Console,Wsdl,Soap Client,我正在尝试从C#中的控制台连接到soap服务(wsdl)。 我的代码相当简单,我将wsdl作为服务引用添加到项目中,代理类(?)按预期创建 该服务对每条消息使用身份验证密钥,我找不到任何地方可以将其添加到soap头中。 作为参考,这是我在主方法中运行的代码: Api.Servicereference1.PortClient object = new Api.Servicereference1.PortClient(); object.testmet
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>
钥匙
有没有人能帮我找到正确的方向,告诉我如何将这个自定义标题添加到我的邮件中?
谢谢。关于如何向WCF客户端代理添加自定义头的文章:
好的,谢谢你的输入,我读了一些书,我想如果我用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()中的参数
尽管此解决方案需要我手动将OperationContext添加到所有消息中,但它为我解决了自定义SOAPHeader的问题