题
我想为WCF服务创建单向方法。一切都可以,除非 我想返回故障消息 - 如果有的话。
我正在使用WSDL和合同文件的WSCF蓝色代码生成器。
在WSDL操作元素中,我只有“输入”和“故障”子元素。 当我运行该服务时,我收到了在单向通信中不能声明故障消息的信息。其中一个解决方案是将单向设置为false ..我做了什么,它的工作正常。如果发生错误,我会收到消息。
但是,我想知道我是否违反了Web服务/ WSDL创建规则......因为从WSDL服务模式生成器为我创建单向通信(设置为“真”),其他编程语言的生成器可能会做同样...所以它是正确的我做了什么吗?如何更改WSDL,以便生成器可以适当地创建代码?
如果理论上我不能以单向通信中的故障使用那么我需要额外的结构,响应返回任何错误?
谢谢!
解决方案
是真的,单向操作无法返回故障到客户。如果要在WCF中生成void
Not单向服务操作,则必须在WSDL合同中为该操作添加空输出元素。
基于.NET的WSDL解析器(例如 wscf.blue 和 svcutil ”将为 not 的生成频率元素生成单向服务操作有一个相应的世代ocodetagcode元素。
例如,此WSDL操作是单向:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
.
另一方面,定义使用空的世代odicetagcode元素的操作(即包含空序列)的xsd类型将被映射到生成的<wsdl:operation>
而不是单向 .NET中的方法,可以选择故障声明:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
<wsdl:output message="tns:FooResponse" />
<wsdl:fault message="tns:FooFault" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
.
,其中<wsdl:output>
类型简单地定义为:
<xs:element name="FooResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
. 其他提示
在WCF中,单向表示操作没有返回的值,客户端不关心调用的成功或失败。
在WCF中,我们还获得了一种自然单向的其他操作,例如通过WCF操作MSMQ,然后将操作设置为单向。
所以,如果要返回某些东西以指示调用状态,那么单向不是正确的选择,您只能使用正常的WCF操作,而不是单向而不是单向。
为单向操作,这里是您参考的文章 wcf单向
我觉得你做了正确的事情。对于任何类型的客户端(C#,Java,C ++,PHP),他们只需要WSDL来创建代理。我觉得它也应该用其他语言工作。最好使用SOAPUI(中性SOAP客户端)来测试您的服务。
不隶属于 StackOverflow