【问题标题】:How can I write an asynchronous WCF service and client that makes use of WS-Addressing?如何编写使用 WS-Addressing 的异步 WCF 服务和客户端?
【发布时间】:2012-06-12 12:23:44
【问题描述】:

Wikipedia page for WS-Addressing 声明:

WS-Addressing 通过指定包含端点引用的公共 SOAP 标头 (wsa:ReplyTo) 来支持使用异步交互

我有一个通过 SOAP 公开的简单 WCF 服务。我可以看到 WSDL,并且在根节点中有提到寻址的 XML 命名空间:

<wsdl:definitions ...
      xmlns:wsa10="http://www.w3.org/2005/08/addressing"  
      xmlns:wsap="http://schemas.xmlsoap.org/ws/2004/08/addressing/policy"    
      xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"  
      xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl"   
      ... 
 >

我能否创建一个使用 WS-Addressing 的异步 WCF(或其他 .NET,但不是来自scratch)客户端?

我添加了对控制台应用程序的服务引用,并且代理类看起来正确,但我怎么知道我正在利用 WS-Addressing?我知道我可以观察 HTTP 请求以查看它进行异步调用,但这有点反复试验。

我知道有“生成异步操作”复选框,我假设这利用了 .NET 中常见的开始/结束模式,而不是 WS-Addressing?

【问题讨论】:

    标签: wcf .net-4.0 ws-addressing


    【解决方案1】:

    异步操作和 WS-Addressing 的使用是正交的。寻址的使用是根据端点中使用的绑定来确定的,并定义了客户端和服务器之间交换的消息的格式。

    操作是同步还是异步这一事实不会影响在线上的消息 - 您可以将相同的消息定义为同步和异步,它们应该也能正常工作。

    【讨论】:

    • 我认为 WS-Addressing 启用异步是否正确?如果是,如何证明服务支持异步调用?
    • 当我勾选“生成异步操作”时,是在 .NET 客户端中完成的,还是使用底层基础架构(即 WS-Addressing)?
    • 即使没有 WS-Addressing,您也可以进行异步操作。就客户端而言,同步和异步操作之间的主要区别在于,对于前者,网络请求将阻塞,直到响应到达,而对于后者,它不会 - 即,如果您与 HttpWebRequest 并行思考,同步操作调用GetResponse,而异步操作调用BeginGetResponse/EndGetResponse。差不多就是这样,它独立于 WS-Addressing。
    • 我明白,但是.NET 以外的客户端呢?
    • 这将取决于您所谈论的客户。从 .NET 案例中可以看出,即使没有 WS-Addressing(或与之同步),一个客户端也可以是异步的,因此一个客户端堆栈将一个客户端堆栈绑定到另一个没有技术原因。
    猜你喜欢
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 2016-01-31
    • 1970-01-01
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    相关资源
    最近更新 更多