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