使用.net通过Web服务在xml中发送特殊字符

时间:2010-01-06 18:13:27

标签: .net xml web-services special-characters

我正在开发一个使用java web服务的.net应用程序,我通过wsdl.exe工具创建了客户端,它的工作正常,Web服务的方法之一,接收xml文档作为参数,并且即时通讯使用XmlTextWriter生成文档,但在xml文档中包含特殊字符时遇到问题,例如:

生成的文档如下所示:

<xml-parameter>
  <some-field> this is text whit a (>) charatcer</some-field>
</xml-parameter>

使用fliddler检查生成的请求,我发现它的开始转义如下:

&lt;xml-parameter&gt;
  &lt;some-field&gt; this is a text whit a (&amp;gt;) character $lt;/some-field&gt;
&lt;xml-parameter&gt;

我可以看到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();

2 个答案:

答案 0 :(得分:0)

为什么要手动生成请求xml而不使用.NET的内置方法来使用Web服务?

好像&gt; *应该是双重逃脱。 “&gt;”需要转义符号以包含在您的xml文档中。然后,需要转义整个XML文档以适应XML Web服务请求。我认为逃避不一定是个问题。

答案 1 :(得分:0)

好的,所以我设法通过替换“&gt;”来解决这个问题在xml上,XmlTextWriter生成并让服务代理转义整个SOAP请求。