如何实现单向方法的可靠性?

时间:2011-03-15 21:17:38

标签: wcf wcf-client wcfserviceclient

What You Need To Know About One-Way Calls, Callbacks, And Events文章告诉我们:

  

客户端不关心调用结果的事实并不意味着客户端根本不关心调用是否发生。通常,您应该为您的服务打开可靠性,即使是单向呼叫

我试图找到如何启用可靠性,但没有找到任何有意义的内容。

你能帮帮我吗?

  1. 如何启用可靠性?
  2. 如何检查单向方法是否到达服务器?
  3. 非常感谢!

3 个答案:

答案 0 :(得分:2)

我将假设您的意思是消息可靠性,如Juval Lowy所述的“Programming WCF Services”所述 - 您的链接文章的作者(因此该引用也会逐字出现)。

可靠性仅对某些绑定有效。以此TCP绑定示例为例。在您的配置文件中:

<binding>
    <netTcpBinding>
        <binding name="MyTcpBinding">
            <reliableSession enabled="true" />
        </binding>
    </netTcpBinding>
</binding>

为了检查可靠性,我将引用这本书(第66页):

  

消息可靠性无法保证   消息传递。它提供的只是   保证如果消息确实如此   没有到达目的地,发件人   会知道的。

我不知道发送者会怎么知道,我从来没有遇到过,但希望它能让你更深入地研究这个话题。

进一步阅读:

http://msdn.microsoft.com/en-us/library/ms733136.aspx

答案 1 :(得分:0)

@Budda:没错,在将每条消息发送到服务器后,您不必立即等待答复或确认。那将是同步操作。我相信你会使用异步操作:发送一条消息,稍后一段时间 - 当确认从服务器到达时,或当套接字告诉你发送失败时 - 你可以控制你的“回调”函数来告诉错误,将消息从队列中取出,或者其他什么。这样,你就可以避免你正确担心的大事。但是现在我已经加入了一个可能令人困惑的答案,我看到整个问题都围绕着wcf,直到现在我才听说过。所以,如果我弄糊涂了水,我道歉。也许在wcf中存在异步通信;总的来说,如果可能的话,我认为这是可行的方法。也许这就是“单向通信”的含义。

答案 2 :(得分:0)

通常,如果您需要OneWay操作和可靠性,则表明您正在构建基于队列的机制。客户端将消息放入队列,工作人员选择消息并处理它们。

也许您可以查看MSMQ并查看它是否可以帮助您。

大多数情况下,OneWay操作不应该携带重要的任务或信息,因为它们本身不能保证服务器处理。当消息已由服务端的调度程序路由时,OneWay会在客户端调用返回。在调度员之后,你没有任何可靠性。