我正在使用ChannelFactory来打开/管理WCF频道(与客户端代理)。然而,当发生异常时,出厂状态不报告,该通道出现故障......WCF ChannelFactory不能准确报告故障状态?
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();
我本来预期工厂状态返回了CommunicationState.Faulted在catch(...)块中。
最后,我正在寻找一种方法来准确地获取使用ChannelFactory与ClientProxy时的通道状态,因为如果可能,我想保留会话状态;而不是循环当一个合法的FaultContact <ExceptionDetail>,那么就会抛出一个合法的FaultContact <ExceptionDetail>来贯穿整个会议...
,通道仍然有效&我可以继续使用它作为预期。但是当引发非FaultContract <ExceptionDetail>时,通道不可用并应循环。但是,在这两种情况下,.State属性都返回CommunicationState.Open,因此没有很好的方法来判断通道是否应该循环或不...
一旦引发了非FaultContract,该频道即使在.State属性固执地报告频道处于打开状态时,也会引发“频道故障”错误。
预先感谢任何输入/想法/指针/想法,
牛逼
究竟你的意思,在非FaultContract“不”? – 2012-03-02 22:32:14
意味着DoWork抛出一个不是FaultContract()的异常(例如抛出ApplicationException) –
TOB
2012-03-04 12:53:43