当IsOneWay = false时,wcf如何阻止客户端?

时间:2011-09-21 19:33:51

标签: c# wcf

主机:具有以下功能:IsOneWay=False

调用此函数时 - 在主机中弹出 MessageBox

客户:有一个winform,其中只有按钮,可以调用主机的功能。

如果主机中的功能IsOneWay = true - 我可以多按客户端按钮(如果我发布了消息框,他不在乎在主持人与否)。

如果IsOneWay = False - 那么他让我按一次直到我发布主机上的MesageBox .. ..

host does he do that ?

How the Client knows that he should be blocked until the user releases the MessageBox on the Host side ?

1 个答案:

答案 0 :(得分:3)

在取消消息框之前,WCF主机不响应客户端。

如果您要在客户端进入调试器,您应该看到您的代码仍然在对主机的WCF调用中。如果你等了足够长的话,它最终会超时。 WCF可以这样做,因为IsOneWay=false要求服务器在客户端继续执行之前返回。当IsOneWay=true客户端发送请求时,服务器立即响应并允许客户端继续(在执行任何服务器代码之前)。

IsOneWay=false
   Client       Server
   ------    |  ------
1. click    --> method --> messagebox waits for OK
(client can't continue until server returns)
2. continue <-- method <-- user dismisses messagebox

IsOneWay=true
   Client     Server
   ------  |  ------
1. click  -->  method --> messagebox waits for OK
(client continues regardless of server state)
2. click  -->  method --> 2nd messagebox waits for OK
                          user dismisses messageboxes
etc...