我在我的应用程序的相关部分中使用了一直到目前为止工作正常的传统SOAP Web服务。他们进行了某种更新,将以前的格式更改为:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Header/>
<soapenv:Body>
<responseType xmlns:ns-980841924="http://serviceuri">
<ns-980841924:arrayOfType soapenc:arrayType="ns-980841924:__sometype[7]">
<item>
<ns-980841924:field1>DATA</ns-980841924:field1>
<ns-980841924:field2>DATA</ns-980841924:field2>
<ns-980841924:field3/>
区别在于名称空间前缀 ns-980841924 的新用法。
我的webservice包装类已经使用wsdl.exe生成了(我尝试使用svcutil.exe,结果相同)。所有代码都有意义,除了wsdl.exe解析的命名空间,即 http://serviceuri 。似乎没有在代码中使用前缀。
当我尝试调用方法时,结果是NULL。拥有该网络服务的技术部门确认没有进行任何更改。也许这个命名空间前缀的新用法是由某些组件的更新引起的,但我不知道。
我希望能够指定前缀。我一直在尝试直接将前缀附加到返回类型的namespace属性。像
这样的东西[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "4.0.30319.17929")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "ns-980841924='http://serviceuri'")]
public partial class ArrayOfSomething : Array
{
}
特别是该行(您可以看到我尝试在命名空间之前插入前缀):
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "ns-980841924='http://serviceuri'")]
,遗憾的是,没有工作。我尝试过类似的stackoverflow帖子,没有任何运气。