如何在Web服务客户端请求中配置SOAP XML名称空间?

时间:2010-08-18 16:52:55

标签: c# xml web-services soap namespaces

我在拨打第三方网络服务时遇到问题。我收到SOAP错误,但获取有效的结果集。我的一位同事在OS400上用RPG编写了一个客户端,它返回一个有效的结果集。当比较Fiddler2中的两个请求的RAW请求时,我注意到的唯一明显差异是我的c#客户端具有 xmlns =“”的SOAP xml元素,而他没有。是否可以删除所述空名称空间声明?请参阅下面引用的SOAP请求:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:xsd="http://www.w3.org/2001/XMLSchema">
        <SendArchitectServiceRequest xmlns="archserver.xsd.dataflux.com">
            <serviceName xmlns="">AddressVerify.dmc</serviceName>
            <fieldDefinitions xmlns="">
                <fieldName>AddressLine_1</fieldName>
                <fieldType>STRING</fieldType>
                <fieldLength>255</fieldLength>
            </fieldDefinitions>
            <fieldDefinitions xmlns="">
                <fieldName>AddressLine_2</fieldName>
                <fieldType>STRING</fieldType>
                <fieldLength>255</fieldLength>
            </fieldDefinitions>
            <fieldDefinitions xmlns="">
                <fieldName>City_in</fieldName>
                <fieldType>STRING</fieldType>
                <fieldLength>255</fieldLength>
            </fieldDefinitions>
            <fieldDefinitions xmlns="">
                <fieldName>State_in</fieldName>
                <fieldType>STRING</fieldType>
                <fieldLength>255</fieldLength>
            </fieldDefinitions>
            <fieldDefinitions xmlns="">
                <fieldName>Zip</fieldName>
                <fieldType>STRING</fieldType>
                <fieldLength>255</fieldLength>
            </fieldDefinitions>
            <fieldDefinitions xmlns="">
                <fieldName>Country</fieldName>
                <fieldType>STRING</fieldType>
                <fieldLength>255</fieldLength>
            </fieldDefinitions>
            <dataRows xmlns="">
                <value>3485 W. Harmon Ave.</value>
                <value/>
                <value>Las Vegas</value>
                <value>NV</value>
                <value>89103</value>
                <value>United States</value>
                <reserved>0</reserved>
            </dataRows>
        </SendArchitectServiceRequest>
    </s:Body>
</s:Envelope>

2 个答案:

答案 0 :(得分:1)

您提出的方法似乎是最简单的方法。另一种方法是使用SOAP extensions来修改SOAP响应,删除空的xmlns属性。您可以修改SoapClientMessageBeforeDeserialize阶段中的SoapMessageStage

答案 1 :(得分:0)

由于我没有听到第二个问题的任何评论或答案,我将接受我遇到的答案,即自动生成的Reference.cs类XML元素声明从System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)更改为{{1} }。

相关问题