Отправить специальные символы в XML через веб-сервис, используя .net - PullRequest
0 голосов
/ 06 января 2010

Я занимаюсь разработкой приложения .net, которое использует веб-службу Java, я создал клиента с помощью инструмента wsdl.exe, и его рабочий инструмент, один из методов веб-службы, получает 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; gt; " вместо & gt; Я все готово, пытаясь использовать сущность вместо фактического персонажа, но не повезло заранее спасибо =).

Edit: Вот код, используемый для генерации 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 голосов
/ 07 января 2010

Хорошо, поэтому мне удалось решить эту проблему, заменив ">" в xml, который генерирует XmlTextWriter, и позволив прокси-серверу службы завершить весь запрос SOAP.

0 голосов
/ 06 января 2010

Почему вы генерируете запрос xml вручную и не используете встроенный метод .NET для использования веб-служб?

Похоже, что> * нужно дважды экранировать. Знак «>» необходимо экранировать, чтобы включить его в документ xml. Затем весь ваш XML-документ должен быть экранирован, чтобы соответствовать запросу веб-службы XML. Я не думаю, что побег обязательно является проблемой.

...