我有定期的net.tcp的WCF服务客户端,和普通的net.tcp 双工 (即回调)WCF服务客户端。 我已经实现了一些逻辑不断地在重新实例情况下,服务已出现故障的连接。
它们在完全相同的方式产生:
FooServiceClient Create()
{
var client = new FooServiceClient(ChannelBinding);
client.Faulted += this.FaultedHandler;
client.Ping(); // An empty service function to make sure connection is OK
return client;
}
BarServiceClient Create()
{
var duplexClient = new BarServiceClient(new InstanceContext(this.barServiceCallback));
duplexClient.Faulted += this.FaultedHandler;
duplexClient.Ping(); // An empty service function to make sure connection is OK
return duplexClient;
}
public class Watcher
{
public Watcher()
{
this.CommunicationObject = this.Create();
}
ICommunicationObject CommunicationObject { get; private set; }
void FaultedHandler(object sender, EventArgs ea)
{
this.CommunicationObject.Abort();
this.CommunicationObject.Faulted -= this.FaultedHandler;
this.CommunicationObject = this.Create();
}
}
所述FaultedHandler()
中止信道,并使用上面的代码重新创建它。
该FooServiceClient
连接逻辑工作得很好,它被许多故障后重新连接。 然而,几乎是相同的,但双工BarServiceClient
仅仅可以从第一故障事件BarServiceClient
情况下,即一次 。
为什么只有复式的首创实例BarServiceClient
被指责的事件吗? 是否有任何变通办法?
类似的非回答的问题: 没有运输安全WCF可靠的会话不会发生故障事件的时间