我在VS 2012中开发了一个C#类,我必须通过HTTPS(一种远程Web服务方法)调用(使用)。我已经应用代码来为安全标记创建自定义标头,但是我必须在根中应用名称空间的声明,如
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>
为此,使用命名空间
xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
必须通过调用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(endpointAddres);
client.vhWsCreatePayIdVersion(request);
答案 0 :(得分:1)
您需要确保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
命名空间不一定需要进入根Envelope
元素 - 它可以放在本地标题中,例如:
<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>