在异架构间通讯时,我们一般会采用WS。我遇到的情况是WSDL已经由AXIS生成,我需要用Dotnet实现服务器。

    简单实现后,发现里面的 NotifySOAPHeader 总是取不值,添加  SoapUnknownHeader[] 后,里面有值。可见是不能识别AXIS发送来的SoapHeader。

    仔细对比Dotnet生成的WSDL,和原来的定义的WSDL相关内容:

 


 


 

      我感觉只有一个区别,就是Dotnet生成的有:form="unqualified" ,而Java原来的没有。所以Dotnet不能识别有Prefix的NodeName,造成不能识别。例如: 


......

 


就因为有一个 xmlns="",造成不能识别该SoapHeader。当然修正的方法也很简单,只要把NotifySOAPHeader的每个属性的元数据修改一下,像下面的示例:


        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
        public string linkId;
    }

修正为:


        [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Qualified)]
        public string linkId;
    }

这样就可以了,不用再写代码从SoapUnknownHeader中取数据了。也没有必须为Java和Dotnet分别写一份代码。

是不是以后用Dotnet发布时,都用上这个声明呢?我经验不多,大家讨论一下。

 

 

相关文章:

  • 2021-05-01
  • 2022-12-23
  • 2022-12-23
  • 2021-07-02
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-20
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-08-07
  • 2021-08-02
  • 2021-12-19
  • 2021-11-03
  • 2021-12-28
相关资源
相似解决方案