我正在开发一个使用java web服务的.net应用程序,我通过wsdl.exe工具创建了客户机,它是web服务的方法之一,它接收一个xml文档作为参数,im使用XmlTextWriter生成文档,但是当在xml文档中包含特殊字符时,im会出现问题:
im生成的文档如下:
<xml-parameter>
<some-field> this is text whit a (>) charatcer</some-field>
</xml-parameter>使用fliddler检查生成的请求,我看到它的begin转义如下:
<xml-parameter>
<some-field> this is a text whit a (&gt;) character $lt;/some-field>
<xml-parameter>我可以看到,被转义为"& 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();发布于 2010-01-06 20:56:53
为什么要手工生成请求xml而不使用.NET的内置方法来使用web服务?
似乎应该是双逃的。">“标志需要转义才能包含在xml文档中。然后,需要对整个XML进行转义,以适应XML服务请求。我不认为逃跑一定是个问题。
发布于 2010-01-07 00:23:32
好的,我设法通过替换XmlTextWriter生成的xml上的">“来解决这个问题,并让服务代理摆脱整个SOAP请求。
https://stackoverflow.com/questions/2015164
复制相似问题