我有接受下列類型的參數,一個WebMethod:Web服務異常處理
[WebMethod]
User(long userid,int number)
當客戶端發送的參數與不同類型的我想,我必須抓住這個錯誤,並寫入到數據庫等
例如ArgumentExceptions ...
我該如何解決這個問題?
謝謝。
我有接受下列類型的參數,一個WebMethod:Web服務異常處理
[WebMethod]
User(long userid,int number)
當客戶端發送的參數與不同類型的我想,我必須抓住這個錯誤,並寫入到數據庫等
例如ArgumentExceptions ...
我該如何解決這個問題?
謝謝。
您是否嘗試過在客戶端使用錯誤的類型時會發生什麼情況?
我希望SOAP庫能夠捕獲這個並引發異常。
在您自己的方法中,您只能檢查傳入參數的值。這就像一個正常的(非網絡)方法。
這正是我的意思。我無法在SOAP擴展中找到處理方法。 – Jack 2010-06-01 09:12:42
您可以用下面的辦法:
每個web方法將總是返回某種WebMethodResult的。
例如
[WebMethod]
public WebMethodResult DoSomethng(guid p_userId)
{
IfMethodIsSuccessful()
{
WebMethodResultSuccess successResult = new WebMethod();
// Add required information into web method result object
return successResult;
}
else
{
WebMethodResultFailure failedResult = new WebMethodResultFailure();
return failedResult;
}
}
理念這裏是每當調用Web方法將返回某種對象。
在這種情況下,WebMethodResult將是父類和WebMethodResultSuccess和WebMethodResult失敗會從父類繼承。
除了IsMethodIsSuccessfull,您可以添加自己的邏輯,將所有內容都包裝到try catch塊中並返回成功/失敗結果。
如果調用從Java腳本或jQuery的網頁的方法,該異常不會被除非你使用SOAP或某種替代性的回傳給客戶端。通過發回自定義對象,您可以通過javascrip/jquery閱讀它們並向用戶顯示適當的消息。
希望這是有道理的。
在日誌記錄方面,您應該編寫一個通用的異常處理層或查看開源替代方案。
您將捕獲特定異常並將其傳遞給異常處理層。在該層(dll)中,您將在數據庫中記錄異常或寫入平面文件。數據庫可能是更好的選擇,因爲可以輕鬆分析數據。
另一種方法是登錄到Windows事件日誌,但我個人不喜歡這個,因爲它並不易產生異常的統計數據,我認爲它有大小限制。
如何在不提供正確參數類型的情況下調用Webservice上的方法? – KroaX 2010-06-01 08:11:21
@KroaX有可能。儘管大多數調用web服務的c#應用程序都將在編譯時進行驗證,但這並不適用於讓我們說例如訪問該服務的javascript客戶端。 – TimothyP 2010-06-01 08:14:20
你想在服務器或客戶端上捕獲它嗎? – 2010-06-01 17:32:48