我想为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客户端)来测试您的服务。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top