的确,单向操作不能将故障返回给客户端。如果要在 WCF 中生成void
非单向服务操作,则必须在 WSDL 合同中为该操作添加一个空的输出元素。
基于 .NET 的 WSDL 解析器(例如WSCF.blue和svcutil )将为没有对应元素的<wsdl:operation>
元素生成单向服务操作。<wsdl:output>
例如,这个 WSDL 操作是单向的:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
另一方面,使用空<wsdl:output>
元素(即包含空序列的 XSD 类型)定义操作将映射到 .NET 中的void
非单向方法,该方法可以选择包含错误声明:
<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>