如何在C#中手动构造SOAP信封?
我正在尝试用C#手动构造SOAP信封。我最初是通过StringBuilder构建它,然后通过LoadXml方法将它添加到XmlDocument中。然而,在执行时,我得到一个例外情况,大致如下: System.Xml.XmlException:“:”字符,十六进制值0x3A, 不能包含在名称中。第1行,位置200 我尝试创建的信封是:如何在C#中手动构造SOAP信封?,c#,.net,xml,soap,C#,.net,Xml,Soap,我正在尝试用C#手动构造SOAP信封。我最初是通过StringBuilder构建它,然后通过LoadXml方法将它添加到XmlDocument中。然而,在执行时,我得到一个例外情况,大致如下: System.Xml.XmlException:“:”字符,十六进制值0x3A, 不能包含在名称中。第1行,位置200 我尝试创建的信封是: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XmlSchema">
<soap:Header>
<wsrp:path
soap:actor="http://schemas.xmlsoap.org/soap/actor/next"
soap:mustUnderstand="1"
xmlns:wsrp="http://schemas.xmlsoap.org/rp">
<wsrp:action>
http://abcd.com/Webservices
</wsrp:action>
<wsrp:to>
http://abcd.com/Webservices.asmx
</wsrp:to>
<wsrp:id>
uuid:aaaaa0a7-9e46-432b-8f1b-35037077601f
</wsrp:id>
</wsrp:path>
<wsu:Timestamp
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
<wsu:Created>
2012-11-30T10:38:13z
</wsu:Created>
<wsu:Expires>
2012-11-30T11:38:13z
</wsu:Expires>
</wsu:Timestamp>
<wsse:Security soap:mustUnderstand="1" xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/07/secext">
<wsse:UsernameToken
wsu:Id="SecurityToken-00c26e1a-3b3b-400f-a99a-3aa54cf8c8ff"
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
<wsse:Username>username</wsse:Username>
<wsse:Password Type="wsse:PasswordText">password</wsse:Password>
<wsse:Nonce>NBzqolcwIZrAOYw1vLyucDM3sQQ=</wsse:Nonce>
<wsu:Created>2012-11-30T10:38:13z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soap:Header>
<soap:Body>
<MethodName xmlns="http://abcd.com/Webservices">
<ValueField>Ford</ValueField>
</MethodName>
</soap:Body>
</soap:Envelope>
http://abcd.com/Webservices
http://abcd.com/Webservices.asmx
uuid:AAAA 0A7-9e46-432b-8f1b-35037077601f
2012-11-30T10:38:13z
2012-11-30T11:38:13z
用户名
密码
NBzqolcwIZrAOYw1vLyucDM3sQQ=
2012-11-30T10:38:13z
河流浅水处
我很难理解为什么编译器对“:”不满意。有没有更好的方法来做这个/我做错了什么?谢谢你的意见。仅供参考,对我有效的解决方案是在字符串前面加上“@”符号,而不是在双引号中使用\“转义序列”,我选择了“”(即,在需要转义序列的地方使用两组双引号)-很有用。
StringBuilder
是构建XML最麻烦的方法之一。请使用XDocument
。