我正在开发一个使用java web服务的.net应用程序,我通过wsdl.exe工具创建了客户端,它的工作正常,Web服务的方法之一,接收xml文档作为参数,并且即时通讯使用XmlTextWriter
生成文档,但在xml文档中包含特殊字符时遇到问题,例如:
生成的文档如下所示:
<xml-parameter>
<some-field> this is text whit a (>) charatcer</some-field>
</xml-parameter>
使用fliddler检查生成的请求,我发现它的开始转义如下:
<xml-parameter>
<some-field> this is a text whit a (&gt;) character $lt;/some-field>
<xml-parameter>
我可以看到beign转义为“&amp; amp; gt; ”而不是&amp; gt; 我准备尝试使用实体而不是实际角色没有运气 提前谢谢=)。
编辑: 这里的代码用于生成xml,基本上我使用内存流和xmltextwriter生成xml,然后读取整个流,我将生成的xml传递给我的服务代理。
string query = "/AGS_Polizas/INBOUNDLINK/@SOURCEITEMREF = > * ";
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, Encoding.UTF8);
writer.Formatting = Formatting.Indented;
writer.Indentation = 4;
writer.WriteStartDocument(true);
writer.WriteStartElement("RunQueryRequest");
writer.WriteAttributeString("xmlns", "http://www.ibm.com/xmlns/db2/cm/beans/1.0/schema");
writer.WriteAttributeString("maxResults", "0");
writer.WriteAttributeString("version", "latest-version(.)");
writer.WriteAttributeString("contentOption", "URL");
writer.WriteAttributeString("retrieveOption", "ITEMTREE");
writer.WriteStartElement("AuthenticationData");
writer.WriteAttributeString("connectString", "SCHEMA=ICMADMIN");
writer.WriteAttributeString("configString", "");
writer.WriteStartElement("ServerDef");
writer.WriteStartElement("ServerType");
writer.WriteString("ICM");
writer.WriteEndElement();
writer.WriteStartElement("ServerName");
writer.WriteString("icmnlsdb");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("LoginData");
writer.WriteStartElement("UserID");
writer.WriteString("icmadmin");
writer.WriteEndElement();
writer.WriteStartElement("Password");
writer.WriteString("Passw0rd");
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteStartElement("QueryCriteria");
writer.WriteStartElement("QueryString");
writer.WriteString(query);
writer.WriteEndElement();
writer.WriteEndElement();
writer.WriteEndElement();
writer.Flush();
stream.Seek(0, SeekOrigin.Begin);
StreamReader reader = new StreamReader(stream);
string xml = reader.ReadToEnd();
writer.Close();
reader.Close();
答案 0 :(得分:0)
为什么要手动生成请求xml而不使用.NET的内置方法来使用Web服务?
好像&gt; *应该是双重逃脱。 “&gt;”需要转义符号以包含在您的xml文档中。然后,需要转义整个XML文档以适应XML Web服务请求。我认为逃避不一定是个问题。
答案 1 :(得分:0)
好的,所以我设法通过替换“&gt;”来解决这个问题在xml上,XmlTextWriter生成并让服务代理转义整个SOAP请求。