2012-12-03 74 views
0

在客户端服务器WCF双工场景中,建议让服务器知道客户端发生错误的方式是什么?假设服务器通知其中一个客户端它需要执行某个操作,并且客户端正在抛出一个异常。WCF双工场景 - 通知服务器的客户端错误

在回调接口,我有这样的事情

[OperationContract(IsOneWay = true)] 
void Work(...); 

什么是最好的办法:

  1. 实现一个NotifyServer(int clientId, string message)消息客户端可以调用,让用户知道所请求的操作失败,
  2. 如果我在操作合同上设置了IsOneWay = false,我是否需要在BackgroundWorker线程上调用每个客户端以保持UI的响应?
  3. 在服务器上实现异步操作?这将如何工作?我可以在客户端上生成异步操作,我必须使用相同的模式(BeginWork,EndWork)作为客户端回调方法吗?

想不到别的,因为在客户端抛出FaultExceptionIsOneWay = true不起作用。

有什么建议吗?

预先感谢您!

回答

0

广告1.这是一种做法......如果Work()可能需要不可预测的时间量,并且您不希望服务器线程挂在该呼叫上,建议使用此方法。

Ad 2.您应该始终在后台工作者中执行WCF操作,并且永远不要在UI线程内执行操作。如果设置了IsOneWay = False,那么显然Work()方法将在服务器上阻塞,直到它在远程客户端并返回结果。但是,即使您设置了isOneWay = true,该方法仍会阻塞低级WCF通信。如果WCF连接被丢弃,则可能需要很长时间才能得到通知。

广告3. 该模式取决于你。 示例:MSDN: OperationContractAttribute.AsyncPattern Property

没有最佳解决方案。这一切都取决于你的设置(类,线程等)。您编码的WCF层应该简单易用 - 这是主要的指导方针。