WebService从我的XmlDocument </xml>中删除<xml>标记

时间:2011-04-07 17:50:24

标签: asp.net xml asmx .net-1.1

我使用WebService将XmlDocument转换为PDF格式。

我发送给Web服务的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上的Web服务时看到他的 xml标签。是否有理由删除此标签?它可能是由SOAP响应引起的吗?

除了在文档中手动添加标签之外,还有其他方法吗?

修改

回答John的问题,是的,我的意思是处理指令。它刚刚开始,我想知道为什么因为我用来转换的库不能没有它。如果我手动添加它,它工作正常,但我只是想知道为什么它会消失。

修改2

即使它不是标签,需要XmlDocument的库在没有它的情况下也不起作用,这就是我需要它的原因。除此之外,正确处理文档的其余部分。 Web Reference中生成的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 个答案:

答案 0 :(得分:2)

很可能是编码问题。 XML声明声称文档是UTF-16,每个字符是两个字节。在其缺席的情况下,另一个库可能正在假设其他编码。

答案 1 :(得分:0)

您永远不会通过XmlNodeXmlElementXmlDocument参数向ASMX服务传递XML声明或处理指令。如果你考虑一下,原因很明显。 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