(警告 - 下面的xml和无偿字符编码的unholy混合.)
简短版本:
为什么我不能得到我的服务引用调用(c#,.net 3.5,添加到VS2008的自动服务引用代码)来正确编码一个看起来像这个电线的参数:(查找"位..那是我的祸根.)
(为清楚起见,删除了其他额外的肥皂碎片)
<SOAP-ENV:Body><SOAPSDK4:SetCondition xmlns:SOAPSDK4="http://tempuri.org/message/">
<sharedSecret>buggerall</sharedSecret>
<xmlData><SEARCHINFO_LIST><SEARCH_INFO action="add" status=&
quot;3" name="TestProfile2" mask="0" campaign_id="33"
campaign_protected="N" condition_protected="N"><CONDITIONS/&
gt;<EXPRESSIONS/></SEARCH_INFO></SEARCHINFO_LIST></xmlData>
</SOAPSDK4:SetCondition></SOAP-ENV:Body>
Run Code Online (Sandbox Code Playgroud)
我设置参数,拨打电话......服务返回一条很好的消息,上面写着"没有SOU--肥皂给你!"
我在传递给webservice参数字符串中尝试了其他几种格式:
action=\"add\"
Run Code Online (Sandbox Code Playgroud)
这给了我这个电线(通过提琴手): action="add"
action="add"
Run Code Online (Sandbox Code Playgroud)
这给了我这个电报: action=&quot;add&quot;
和各种组合(action =""add""?!)与html.encode,url.encode几乎完全被轰炸,或在电线上显示为双引号.
哦,我甚至试过<![CDATA["]]周围.那也行不通.
有没有办法在soap消息的innerHtml位强制使用双引号编码?
*(因为这就是服务所需要的.不要问问题.这些不是您正在寻找的机器人)
*** 长而曲折的版本:
我正在编写一个应用程序来自动化一些目前由(winform)管理GUI应用程序处理的程序.(实际上,它是一个mmc snap in.无论如何.)
为了完成它的任务,winform应用程序通过标准的Web服务调用与它的服务器进行通信.
我正在使用VS2008的漂亮的"Web服务参考"自动生成东西(这是技术说明),并且我已成功通过Web服务进行身份验证.为了确保我正确地做事,我从GUI应用程序中捕获了调用,然后将它们与我在线上发送的内容进行了比较.一切都很好.然后我遇到了&符号的邪恶.(更恰当的说,如何正确编码)
对于其中一个调用,Web服务期望看到这样的内容:(我捕获了通过提琴手发送此应用程序的应用程序)
<?xml version="1.0" encoding="UTF-8" standalone="no"?><SOAP-ENV:Envelope
xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema" xmlns:SOAPSDK2="
http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAPSDK3="
http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="
http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAPSDK4:SetCondition
xmlns:SOAPSDK4="http://tempuri.org/message/"><sharedSecret>0500001007C3525F3-F315-460D-
AF5C-D84767130126094</sharedSecret><xmlData><SEARCHINFO_LIST><SEARCH_INFO
action="add" status="3" name="TestProfile2" mask=&
quot;0" campaign_id="33"campaign_protected="N"
condition_protected="N"><CONDITIONS/><EXPRESSIONS/>&
lt;/SEARCH_INFO></SEARCHINFO_LIST></xmlData></SOAPSDK4:SetCondition></SOAP-
ENV:Body></SOAP-ENV:Envelope>
Run Code Online (Sandbox Code Playgroud)
剥离所有额外的SOAP-y东西以显示相关位 - 这是<xmlData>传递的部分.注意"周围的参数:
<SEARCHINFO_LIST><SEARCH_INFO action="add"
status="3" name="TestProfile2" mask="0" …Run Code Online (Sandbox Code Playgroud)