2010-06-01 258 views
0

我有接受下列類型的參數,一個WebMethod:Web服務異常處理

[WebMethod] 
User(long userid,int number) 

當客戶端發送的參數與不同類型的我想,我必須抓住這個錯誤,並寫入到數據庫等

例如ArgumentExceptions ...

我該如何解決這個問題?

謝謝。

+1

如何在不提供正確參數類型的情況下調用Webservice上的方法? – KroaX 2010-06-01 08:11:21

+1

@KroaX有可能。儘管大多數調用web服務的c#應用程序都將在編譯時進行驗證,但這並不適用於讓我們說例如訪問該服務的javascript客戶端。 – TimothyP 2010-06-01 08:14:20

+0

你想在服務器或客戶端上捕獲它嗎? – 2010-06-01 17:32:48

回答

1

您是否嘗試過在客戶端使用錯誤的類型時會發生什麼情況?

我希望SOAP庫能夠捕獲這個並引發異常。

在您自己的方法中,您只能檢查傳入參數的。這就像一個正常的(非網絡)方法。

+0

這正是我的意思。我無法在SOAP擴展中找到處理方法。 – Jack 2010-06-01 09:12:42

0

您可以用下面的辦法:

每個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閱讀它們並向用戶顯示適當的消息。

希望這是有道理的。

0

在日誌記錄方面,您應該編寫一個通用的異常處理層或查看開源替代方案。

您將捕獲特定異常並將其傳遞給異常處理層。在該層(dll)中,您將在數據庫中記錄異常或寫入平面文件。數據庫可能是更好的選擇,因爲可以輕鬆分析數據。

另一種方法是登錄到Windows事件日誌,但我個人不喜歡這個,因爲它並不易產生異常的統計數據,我認爲它有大小限制。