我正在使用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