如何在Web服务客户端请求中配置SOAP XML名称空间?
问题描述:
我无法拨打第三方网络服务。我有而不是收到一个SOAP错误,但是不是得到一个有效的结果集。我的一位同事在OS400上为RPG编写了一个客户端,并且它返回了一个有效的结果集。当比较这两个请求的Fiddler2中的RAW请求时,我注意到唯一明显的区别是我的c#客户端具有SOAP xml元素,并且xmlns =“”而他没有。是否有可能删除空的名称空间声明?请参考下面引用的SOAP请求:如何在Web服务客户端请求中配置SOAP XML名称空间?
<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>
答
您提出的方法似乎是最简单的方法。另一种方法是使用SOAP extensions来修改SOAP响应,删除空的xmlns属性。您将修改SoapMessageStage的BeforeDeserialize
阶段中的SoapClientMessage。
答
因为我没有听到任何意见或回答我的第二个问题,我会接受,我碰到这是改变自动生成Reference.cs类XML元素的答案声明从System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)
到System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)
。
如果我将自动生成的Reference.cs类XML元素声明从[System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]更改为[System.Xml.Serialization.XmlElementAttribute( Form = System.Xml.Schema.XmlSchemaForm.Qualified)]空名称空间声明消失。有没有办法做到这一点,而无需修改这个易失性的,自动生成的文件? – 2010-08-18 18:08:11