3

关于单向调用、回调和事件您需要了解的内容一文讲述:

客户端不关心调用结果的事实并不意味着客户端根本不关心调用是否发生。一般来说,你应该为你的服务开启可靠性,即使是单向调用

我试图找到如何启用可靠性,但没有发现任何有意义的东西。

请你帮助我好吗:

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

非常感谢!

4

3 回答 3

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

于 2011-03-15T21:26:31.793 回答
0

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

于 2011-03-15T21:58:30.180 回答
0

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

也许你可以看看 MSMQ 看看它是否可以帮助你。

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

于 2011-03-17T20:31:13.753 回答