0

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

在回调接口上,我有这样的东西

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

什么是最好的方法:

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

想不到别的了,因为FaultException在客户端抛出一个什么时候是IsOneWay = true行不通的。

有什么建议吗?

先感谢您!

4

1 回答 1

0

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

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

广告 3. 模式由您决定。示例:MSDN:OperationContractAttribute.AsyncPattern 属性

不存在最佳解决方案。这完全取决于您的设置(类、线程等)。您编写的 WCF 层应该易于使用 - 这是主要指导方针。

于 2012-12-03T13:34:56.737 回答