SOAP响应的序列化,无根xml

时间:2019-03-14 14:08:15

标签: asp.net xml web-services

我正在尝试使用asmx来实现SOAP Web服务,该服务模仿现有的第三方服务。第三方给出了一个示例SOAP响应(简化):

<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/" SOAP:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <SOAP:Body>
        <ns:PlaceOrderResponse xmlns:ns="http://www.some-company.co/ordering">
            <ns:Header>
                <ns:OrderID>1234567890</ns:OrderID>
                <ns:OrderAccepted>Y</ns:OrderAccepted>
            </ns:Header>
            <ns:ResponseLine>
            ...
            </ns:ResponseLine>
            <ns:ResponseLine>
            ...
            </ns:ResponseLine>
        </ns:PlaceOrderResponse>
    </SOAP:Body>
</SOAP:Envelope>

关于响应的两件事“有趣”:     1)在包含Header元素和ResponseLine元素的元素下没有ROOT NODE。     2)ResponseLine元素没有根(这不是问题,因为可以使用XmlElementAttribute对其进行控制)。

这是我的尝试:

[WebMethod]
public OrderResponse PlaceOrder(...)

其中OrderResponse定义为

public class OrderResponse
{
    [XmlElement("Header", Order = 1)]
    public orderHeader Header { get; set; }

    [XmlElement("OrderLine", Order = 2)]
    public List<responseLine> responseLines;
}

由此生成的SOAP如下所示:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <PlaceOrderResponse xmlns="http://www.some-company.co/ordering">
            <PlaceOrderResult>
                <Header>
                    <OrderID>1234567890</OrderID>
                    <OrderAccepted>Y</OrderAccepted>
                </Header>
                <OrderLine>
                    ...
                </OrderLine>
                <OrderLine>
                    ...
                </OrderLine>
            </PlaceOrderResult>
        </PlaceOrderResponse>
    </soap:Body>
</soap:Envelope>

请注意元素下的元素。这是不需要的,我找不到防止它的方法。我已经看过XmlRootAttribute类,它使我可以重命名它,但是显然不能忽略它。我是否应该放弃尝试使用asp.net项目执行此操作,如果是这样,还有什么其他方法最简单?

0 个答案:

没有答案