我无法从C#中使用WSO2数据服务。我使用记录的方式创建了数据服务,然后能够通过“TryIt”函数与它进行交互。 然后我在Visual Studio 2010中注册服务引用。我收到的错误是:
The method 'update_RealtyIntroduction_operation' in type 'Realty1.ServiceReference1.RealtyIntroduction_DataServicePortType' is marked IsOneWay=true
and declares one or more FaultContractAttributes. One-way methods cannot declare FaultContractAttributes.
To fix it, change IsOneWay to false or remove the FaultContractAttributes.
如果我通过删除IsOneWay或FaultContractAttributes来编辑生成的代码,那么它将正常工作,直到我更新服务引用。似乎问题出在WSO2生成的WSDL 1.1中,因为它违反了W3C标准。 该标准定义了以下操作:
<wsdl:definitions .... > <wsdl:portType .... > *
<wsdl:operation name="nmtoken">
<wsdl:input name="nmtoken"? message="qname"/>
</wsdl:operation>
</wsdl:portType >
</wsdl:definitions>
http://www.w3.org/TR/wsdl#_one-way
但是WSO2正在产生以下内容:
<wsdl:operation name="update_RealtyIntroduction_operation">
<wsdl:documentation />
<wsdl:input wsaw:Action="urn:update_RealtyIntroduction_operation" message="ns0:update_RealtyIntroduction_operationRequest" />
<wsdl:fault wsaw:Action="urn:update_RealtyIntroduction_operationDataServiceFault" name="DataServiceFault" message="ns0:DataServiceFault" />
</wsdl:operation>
有没有人对如何实现这种互操作有一些建议?
答案 0 :(得分:1)
是的,这似乎是仅限操作的错误。现在,对于您可能进行的只进行操作,您可以为数据服务操作设置标志“returnRequestStatus”以实际使其成为进出操作,然后它将简单地发送静态成功消息以进行成功调用,或者否则会发送SOAP错误。从这些类型的操作生成的WSDL将符合规范。
干杯, 长香。