我正在開發.Net Webform應用程序,大量使用Web服務與外部服務器數據庫進行通信。Web服務重新連接模式
所以,我試圖找到調用WS方法時處理斷開和故障的最佳途徑。
現在,我已經取得了所有的WS方法我打電話,說重複循環的具體WS調用,直到它卡梅斯出一個成功的第一層的代理功能-kind。
對於這兩個同步和異步調用,我已經解決了我的問題,但我添加了一個惱人的額外層,以我的web層,用額外的維護,以及大量的冗餘代碼。
我不相信有沒有這種標準的情況已有的解決方案,但到處都找不到它。
什麼想法?
之後,我的額外層(同步)的例子:
public static int WsMethod(string param1, int param2)
{
while(true)
{
try
{
return new Webpoint().WsMethod(param1, param2);
}
catch (Exception)
{
Thread.Sleep(new TimeSpan(0, 0, sleep_seconds));
}
}
}
和異步:
public static void WsMethodAsync(string param1, int param2, WsMethodCompletedEventHandler handler)
{
while (true)
{
try
{
var server = new Webpoint();
server.WsMethodAsyncCompleted += delegate(object sender, WsMethodAsyncCompletedEventArgs args)
{
if (args.Error != null)
{
Thread.Sleep(new TimeSpan(0, 0, sleep_seconds));
this.WsMethodAsync(param1, param2, handler);
}
else
{
handler(sender, args);
}
};
server.WsMethodAsyncAsync(param1, param2);
return;
}
catch (Exception)
{
Thread.Sleep(new TimeSpan(0, 0, sleep_seconds));
}
}
}
David,Carsten,謝謝你的回覆。 我現在明白了,我應該確定所有與連接問題有關的異常,這些異常可能不是無限循環,而是n次重試,然後繼續。在所有其他異常/錯誤情況下將控制權歸還給調用者。 但是,雖然我會根據這個修改每個方法的代理函數,但我還是忍受着通用的冗餘代碼......有什麼想法嗎? – Tuk
@Tuk:理想情況下,你不應該那樣做。代理應該做它目前的工作。調用代理的代碼可以捕獲異常並以任何您想要的方式處理它們。如果有幾種情況需要重新嘗試幾次,請確定這些情況並僅針對這些情況實施。但這不應該是一個目標。確保重試代碼也報告錯誤,以便可以識別和修復根本原因。 – David