我想为 wcf 服务创建一种单向方法。一切都好除非 我想返回故障消息 - 如果有的话。
我正在为 wsdl 和契约(Contract)文件使用 wscf blue 代码生成器。
在 wsdl 操作元素中,我只有“输入”和“故障”子元素。 当我运行该服务时,我得到了无法在单向通信中声明故障消息的信息,并且..其中一种解决方案是将单向设置为 false ..我所做的一切都很好。如果发生错误,我会收到消息。
但是我想知道我是否违反了 web 服务/wsdl 创建规则......因为 wsdl 服务模式生成器为我创建了单向通信(设置为“true”),而其他编程语言的生成器可能会做同样的事情......
那么我做的对吗?我如何更改 wsdl 以便生成器可以适本地创建代码?
如果理论上我不能在单向通信中使用错误,那么我是否需要额外的响应结构来返回任何错误?
谢谢!
最佳答案
one-way operations can't return faults 是真的给客户。如果你想生成一个 void
不是单向 WCF 中的服务操作,您必须在 WSDL 协定中为该操作添加一个空输出元素。
基于 .NET 的 WSDL 解析器(例如 WSCF.blue 和 svcutil )将为 <wsdl:operation>
生成单向服务操作没有的元素有相应的<wsdl:output>
元素。
例如这个 WSDL 操作 is one-way :
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
另一方面,用一个空的 <wsdl:output>
定义一个操作元素(即包含空序列 的 XSD 类型)将映射到 void
不是 .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>
哪里<tns:FooResponse>
类型简单定义为:
<xs:element name="FooResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
关于c# - 带有故障消息的 WCF 服务单向方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9680781/