我正在使用ChannelFactory来打开/管理WCF通道(而不是客户端代理)。但是,当出现异常时,工厂状态没有报告通道发生故障...
ChannelFactory<IContract> factory
= new ChannelFactory<IContract>("NetTcpBinding_IContract",
new EndpointAddress("net.tcp://localhost:8509/WCFSvc"));
try
{
IContract contrct = factory.CreateChannel();
contrct.DoWork(); //throws a non-FaultContract<ExceptionDetail>() exception
factory.Close();
}
catch (Exception)
{
CommunicationState s = factory.State; //returns CommunicationState.Opened
}
IContract.DoWork() 的样子如下:
[FaultContract(typeof(ExceptionDetail))]
void DoWork();
我本来期望在 catch(...) 块中返回 CommunicationState.Faulted 的工厂状态。
最终,我正在寻找一种准确获取通道状态的方法,当使用 ChannelFactory 与 ClientProxy 时,因为我希望尽可能保留会话状态; 如果真正的 FaultContact通过,不要循环整个会话...
当出现真正的 FaultContact时,通道仍然有效,我可以按预期继续使用它。但是,当引发非 FaultContract 时,通道无法使用,应该进行循环。但是,在这两种情况下,.State 属性都返回 CommunicationState.Open,因此没有很好的方法告诉通道是否应该被循环...
一旦引发非 FaultContract,即使 .State 属性固执地报告通道处于已打开状态,将来通过通道进行的调用也会引发“通道已故障”的错误。
谢谢提前任何输入/想法/指针/思路,T