C# 如何定义要包含在XML请求头中的XML名称空间,该请求将通过Web服务调用的调用发送?

C# 如何定义要包含在XML请求头中的XML名称空间,该请求将通过Web服务调用的调用发送?,c#,xml,web-services,wcf,soap,C#,Xml,Web Services,Wcf,Soap,我在VS 2012中开发了一个C#类,我必须通过远程web服务方法HTTPS调用(消费)。我已经应用代码为安全标记创建自定义头,但是我必须在根中应用名称空间声明,如 xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 必须通过web服务方法调用发送的完整XML请求将如下所示(并已通过SOAP UI成功测试): <?xml version="1.0" en

我在VS 2012中开发了一个C#类,我必须通过远程web服务方法HTTPS调用(消费)。我已经应用代码为安全标记创建自定义头,但是我必须在根中应用名称空间声明,如

xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
必须通过web服务方法调用发送的完整XML请求将如下所示(并已通过SOAP UI成功测试):

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <env:Header>
        <ns1:Security>
            <ns1:UsernameToken>
                <ns1:Username>XXXXXXXXXXXXXXXXXXXX</ns1:Username>
                <ns1:Password>ZZZZZZZZZZZZZZZZZZZZ</ns1:Password>
            </ns1:UsernameToken>
        </ns1:Security>
    </env:Header>
    <env:Body>
        <ns:vhWsVersion/>
    </env:Body>
</env:Envelope>
必须通过调用web服务方法包含

如有任何帮助,请谅解

编辑

var customBinding = new CustomBinding(); 
customBinding.Elements.Add(new TextMessageEncodingBindingElement 
{ 
   MessageVersion = MessageVersion.Soap11, 
   WriteEncoding = System.Text.Encoding.UTF8
}); 
var Uri = new Uri("https://"); 
var endpointAddres = new EndpointAddress(Uri, new MySecurityHeader()); 
var client = new ChannelFactory<ServiceReference3.VhWsCreatePayId>(customBinding)
             .CreateChannel(e‌​ndpointAddres); 
client.vhWsCreatePayIdVersion(request);

var customBinding=new customBinding();
添加(新的TextMessageEncodingBindingElement
{ 
MessageVersion=MessageVersion.Soap11,
WriteEncoding=System.Text.Encoding.UTF8
}); 
var Uri=新Uri(“https://”);
var endpointAddres=newendpointaddress(Uri,new MySecurityHeader());
var client=新的ChannelFactory(customBinding)
.CreateChannel(e)‌​ndpointAddres);
client.vhWsCreatePayIdVersion(请求);

您需要确保
http://docs.oasis-open.org/...
命名空间包含在
SoapHeader
中,例如

[System.Xml.Serialization.XmlRootAttribute(Namespace = 
  "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
   IsNullable = false)]
public partial class UsernameToken : System.Web.Services.Protocols.SoapHeader
{
    // Namespace is also available here if different from the root element.
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Username {get; set;}
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string Password {get; set;}
}
编辑
如果您正在使用另一种技术构建
SoapHeader
,请注意
oasis
命名空间不一定需要进入根
信封
元素-它可以本地放置在标头中,例如:

<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <UsernameToken>
        <Username>XXXXXXXXXXXXXXXXXXXX</Username>
        <Password>ZZZZZZZZZZZZZZZZZZZZ</Password>
    <UsernameToken>
</Security>

XXXXXXXXXXXXXXXXXX
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz

当您说您已经为安全标签构建了
自定义头时,我假设您继承了内置的
SoapHeader
基。如果您正在使用另一种技术来构建Xml,请与我们分享,以便我们提供帮助。很抱歉给您带来麻烦。。。这里是var customBinding=new customBinding();添加(新的TextMessageEncodingBindingElement{MessageVersion=MessageVersion.Soap11,WriteEncoding=System.Text.Encoding.UTF8});var Uri=新Uri(“https://”);var endpointAddres=newendpointaddress(Uri,new MySecurityHeader());var client=newchannelfactory(customBinding).CreateChannel(endpointAddres);client.vhWsCreatePayIdVersion(请求);抱歉-我应该意识到这是一个-我建议你仔细看看。您可能可以直接从配置中配置自定义绑定?
<Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <UsernameToken>
        <Username>XXXXXXXXXXXXXXXXXXXX</Username>
        <Password>ZZZZZZZZZZZZZZZZZZZZ</Password>
    <UsernameToken>
</Security>