WCF客户端和服务器是否有完整的样板?

时间:2018-12-07 22:44:19

标签: c# wcf

我使用WCF有很长的路要走,但是我意识到我总是一遍又一遍地重复相同的事情(对于使用WCF的其他开发人员来说显然也是相同的)。例如,我将这种方式用于简单的非双工客户端:

try
{
   Channel.MyMethod();
}
catch
{
    //a LOT of various communications errors, which just annoying to handle and almost always simple disconnect
}

我也将其设为 void Invoke(Action action)方法,如果它处于Faulted状态,则会重新创建通道。 对于双工来说,更糟,因为我始终需要检查是否仍然存在连接,否则它可能会永远卡住。 我通过调用心跳存根来实现:

 Channel.Heartbeat();

当出现通信错误时,我在回调中调用OnFaulted

 Callback.OnFaulted(...);

如果您想在Channel和ChannelFactory上使用错误事件,那您肯定错了:

client = new Client();
((ICommunicationObject)client).Faulted += new EventHandler(client_Faulted);

是的,它正在工作……有时它仍然会冻结,因为在服务器启动断开连接后无法保证此事件。

所以,我总是在WCF中看到这些问题:

  1. 用于简单单向客户端的Channel / ChannelFactory重新创建(都可以处于故障状态)。
  2. 应对各种杂项通信/套接字/超时/ WCF将在客户端抛出的任何异常。如果没有启用WCF跟踪,他们不会描述原因。
  3. 使用双工连接(在单独的任务中,调用心跳)时手动检查通信状态。
  4. 订阅隐藏的ICommunicationObject接口(这似乎无用,因为无法正常工作)
  5. 使用双工时在服务器端重复处理相同的异常。

是否有一个库/代理构建器或完美的例子,一个人应该如何一次解决所有这些问题? 就个人而言,由VS生成的代理在生产代码中根本无法使用真是令人讨厌。

0 个答案:

没有答案