WebService удалить тег <xml>из моего XmlDocument - PullRequest
1 голос
/ 07 апреля 2011

Я использую WebService для преобразования и XmlDocument в PDF.

XmlDocument, который я отправляю в веб-сервис, выглядит следующим образом.

<?xml version="1.0" encoding="utf-16" ?> 
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
...
</fo:root>

У меня возникла проблема, поэтому я вошел вмод отладки, чтобы узнать, что когда объект XmlDocument переносится с самого моего веб-сайта asp в веб-службу, которая работает в .NET 1.1, видит его тег xml.Есть ли причина, по которой этот тег удаляется?Может ли это быть вызвано ответом SOAP?

Есть ли способ, кроме ручного добавления тега обратно в документ?

Редактировать

Чтобы ответить на вопрос Джона, я имею в виду инструкцию по обработке .Это просто уходит, и мне было интересно, почему, потому что библиотека, которую я использую для конвертации, не работает без нее.Если я добавлю его вручную, он будет работать нормально, но я просто хотел узнать, почему он исчез.

Изменить 2

Даже если это не тег, библиотекаэто требует XmlDocument просто не работает без него, поэтому мне это нужно.Кроме этого, остальная часть документа обрабатывается правильно.Сгенерированный Reference.cs из веб-ссылки выглядел следующим образом для вызываемого метода:

/// <remarks/>
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/GeneratePdfFromXml", RequestNamespace="http://tempuri.org", ResponseNamespace="http://tempuri.org", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    [return: System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")]
    public byte[] GeneratePdfFromXml(XmlNode FormattedObjectXml) {
        object[] results = this.Invoke("GeneratePdfFromXml", new object[] {
                    FormattedObjectXml});
        return ((byte[])(results[0]));
    }

Это та же проблема, что и у другой проблемы, с которой у меня возникла ссылка XmlDocument как XmlNode, поскольку ответ SOAP являетсясам XmlDocument.

Я просто изменил это на строку;MyXmlDocument.OuterXml;Таким образом, все сохранено и без проблем.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2011

Скорее всего, это проблема кодировки.Декларация XML утверждает, что документ находится в формате UTF-16, что составляет два байта на символ.Другая библиотека, вероятно, предполагает, в ее отсутствие, некоторую другую кодировку.

0 голосов
/ 08 апреля 2011

Вы никогда не получите декларацию XML или инструкцию обработки, переданную через параметр XmlNode, XmlElement или XmlDocument службе ASMX.Причина очевидна, если вы думаете об этом.Запрос SOAP будет выглядеть примерно так:

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" >
    <SOAP-ENV:Body>
        <parameter>
            <?xml version="1.0" encoding="utf-16" ?> 
            <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
            </fo:root>
        </parameter>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Но объявление XML может появиться только в самом начале документа, поэтому оно недопустимо.

Решение, как вы обнаружили,это отправить этот XML в виде строки.Сделайте ваш тип параметра string, и либо используйте XmlNode.OuterXml.

...