我正在使用幾個WCF調用執行過程的項目。第一次呼叫返回一個唯一的ID(Guid),以下所有呼叫必須提供。在服務器端,每個呼叫都與該唯一ID一起記錄,以便可以觀察單個過程的過程(假設客戶端可以同時開始其中幾個過程並且它們是線程安全的)。如何捕獲WCF中的所有異常但包含自定義數據?
一個客戶端的例子是類似以下內容:
string clientName = GetClientName();
Guid uniqueId = wcfClient.Begin(clientName);
object data = wcfClient.GetData(clientName, uniqueId);
object processedData = ProcessDataLocally(data);
bool success = wcfClient.confirmDataValidity(clientName, uniqueId, processedData);
// ...
wcfClient.End(clientName, uniqueId);
如果出現錯誤,在服務器端,我想,要使用UNIQUEID給予通話記錄爲好,那出問題了。爲此,我做了所有的服務方法使用如下的功能:
private T DoProcess<T>(Guid uniqueId, Func<T> process)
{
try
{
return process();
}
catch(Exception ex)
{
Log(ex, uniqueId);
throw; // or throw the same thing every time, if the client
// shouldn't know the details
}
}
public object GetData(string clientName, Guid uniqueId)
{
return DoProcess(uniqueId,() =>
{
object data;
// Generate data
return data;
});
}
然而,似乎這樣做沒有捕捉到所有可能出現的錯誤(例如,如果連接超時) 。
我閱讀了關於實現IErrorHandler
接口並將其附加到服務。雖然這似乎捕捉到了所有的錯誤,但除了異常之外,似乎沒有辦法將信息傳遞給它,例如uniqueId。因此無法記錄該ID。
是否有可能捕獲所有異常幷包含已傳遞給拋出異常的方法的數據?
https://開頭計算器。 com/questions/3666516/is-there-a-way-to-catch-all-unhandled-exceptions-throw-by-a-given-class –