c# - 带有故障消息的 WCF 服务单向方法

标签 c# wcf wscf

我想为 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.bluesvcutil )将为 <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/

相关文章:

c# - 结合 MEF 和 IoC 容器

wcf - 获取WCF的客户端IP地址,操作后

c# - 远程服务器返回错误 : (405) Method Not Allowed. WCF REST 服务

c# - .NET 中的 XmlSerializer 与 XmlSchemaForm.Unqualified

c# - 为什么我的 WCF 客户端/服务会出现 ActionNotSupportedException?

c# - 如何使用asp.net c#根据用户输入查询oracle数据库

c# - 使用纯字符串是否可以避免SQL注入(inject)攻击?

javascript - 检查网站是否是从嵌入浏览器打开的

wcf - 通用服务接口(interface)