WCF双工场景 - 通知服务器的客户端错误
问题描述:
在客户端服务器WCF双工场景中,建议让服务器知道客户端发生错误的方式是什么?假设服务器通知其中一个客户端它需要执行某个操作,并且客户端正在抛出一个异常。WCF双工场景 - 通知服务器的客户端错误
在回调接口,我有这样的事情
[OperationContract(IsOneWay = true)]
void Work(...);
什么是最好的办法:
- 实现一个
NotifyServer(int clientId, string message)
消息客户端可以调用,让用户知道所请求的操作失败, - 如果我在操作合同上设置了
IsOneWay = false
,我是否需要在BackgroundWorker
线程上调用每个客户端以保持UI的响应? - 在服务器上实现异步操作?这将如何工作?我可以在客户端上生成异步操作,我必须使用相同的模式(
BeginWork
,EndWork
)作为客户端回调方法吗?
想不到别的,因为在客户端抛出FaultException
当IsOneWay = true
不起作用。
有什么建议吗?
预先感谢您!
答
广告1.这是一种做法......如果Work()可能需要不可预测的时间量,并且您不希望服务器线程挂在该呼叫上,建议使用此方法。
Ad 2.您应该始终在后台工作者中执行WCF操作,并且永远不要在UI线程内执行操作。如果设置了IsOneWay = False,那么显然Work()方法将在服务器上阻塞,直到它在远程客户端并返回结果。但是,即使您设置了isOneWay = true,该方法仍会阻塞低级WCF通信。如果WCF连接被丢弃,则可能需要很长时间才能得到通知。
广告3. 该模式取决于你。 示例:MSDN: OperationContractAttribute.AsyncPattern Property
没有最佳解决方案。这一切都取决于你的设置(类,线程等)。您编码的WCF层应该简单易用 - 这是主要的指导方针。