(转).net调用java生成的ws R2718的问题
from http://blog.csdn.net/cyq1984/article/details/17120097
java工程,使用easywsdl生成发布的WebService的wsdl。并使用SDO的服务数据对象模型,对数据进行描述。
生成的wsdl使用vs2010的visual studio命令提示行,使用wsdl out命令生成C#相关的调用文件,发现后台会抛出如下信息:
警告: 此 Web 引用不符合 WS-I Basic Profile v1.1。
R2718: 说明中的 wsdl:binding 必须与所引用的 wsdl:portType 包含一组相同的 wsdl:operations。
- 来自命名空间“http://www.com/esb/ComponentService1”的 portType“Com
ponentService1Interface”上的操作“operation1”没有匹配的绑定。
- 在来自命名空间“http://www.com/esb/ComponentService1”的 portType“C
omponentService1Interface”上,没有与来自命名空间“http://www.com/esb/Com
ponentService1”的绑定“ComponentService1Soap11”上的操作“operation1”相匹配的
操作。
- 在来自命名空间“http://www.com/esb/ComponentService1”的 portType“C
omponentService1Interface”上,没有与来自命名空间“http://www.com/esb/Com
ponentService1”的绑定“ComponentService1Soap11”上的操作“operation1”相匹配的
操作。
有关 WS-I Basic Profile v1.1 的更多详细信息,请参阅位于以下位置的规范:
http://www.ws-i.org/Profiles/BasicProfile-1.1.html。
错误: 无法从命名空间“http://www.com/esb/ComponentService1”导入绑定“Com
ponentService1Soap11”。
- 来自命名空间“http://www.com/esb/ComponentService1”的 portType“Comp
onentService1Interface”上的操作“operation1”存在以下语法错误: 此操作没有匹配的
绑定。请检查 Binding 节中的操作、输入和输出的名称是否与 PortType 节中的相应名称
相匹配。
看起来是生成的WSDL不符合ws的某些规范(.Net对这些东西的验证真严格),但是,在java下从没碰到过此类问题。
研究相关规范及网络资源学习,发现问题根本原因在于wsdl文件中的以下“portType”片段的描述:
[html] view plain copy
与后续的“binding”部分的描述:
[html] view plain copy
两者的“input”与“output”的相关内容,name属性不一致(所谓不一致,即前者有name属性值,后者没有)。
试过之后,发现有两种解决方案:
1、去掉前者的input与output的name属性值。
2、在后者的input与output中添加与前者相同的name属性值。
即调整后的片段为:
[html] view plain copy
或
[html] view plain copy
总之,就是需要两者的input与output的属性保持完全的一致。