在C#控制台中使用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

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

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

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的问题