5
我已被移交的關閉和中止信道的這種方式:檢查狀態(單線程)後,WCF通道是否可能發生故障?
public async Task<MyDataContract> GetDataFromService()
{
IClientChannel channel = null;
try
{
IMyContract contract = factory.CreateChannel(address);
MyDataContract returnValue = await player.GetMyDataAsync();
channel = (IClientChannel);
return returnValue;
}
catch (CommunicationException)
{
// ex handling code
}
finally
{
if (channel != null)
{
if (channel.State == CommunicationState.Faulted)
{
channel.Abort();
}
else
{
channel.Close();
}
}
}
}
假設只有一個線程所使用的信道。我們如何知道在查看狀態後頻道不會錯誤?如果發生這樣的事情,代碼將嘗試Close()和Close()將在finally塊中引發異常。爲什麼這是安全/不安全的解釋,以及更好,更安全的方式的例子,將不勝感激。
我不太確定,如果通道的另一端突然出現故障,將會關閉嗎?在關閉之前放置一個斷點,關閉服務,看看Close是否會拋出。 – asawyer
好的建議,生病嘗試,當我今天晚些時候有機會。但是我必須測試一下,我所使用的每個通道堆棧都不是我的嗎? – insipid
我在現場製作中大量使用WCF服務,並且從未看到服務處理類出現任何錯誤。他們在過去8個月中被稱爲2 + 100萬次。這似乎是好的,但你的問題很有趣,我沒有考慮它,所以我從來沒有試圖找出... – asawyer