2012-01-10 143 views
0

我有實現asmx服務的類。處理全局錯誤asmx

class AsmxService{ 
public string Method(int i){.....} 
....} 

我省略了一些屬性,但如果您覺得有必要,可以提供完整的代碼。

如果我在函數Method中得到異常,這不是問題:只需使用try-catch即可。但是如果在函數外面發生錯誤,我們應該怎麼做。例如,客戶端傳遞了無效的int參數或其他東西。在這種情況下,我在客戶端收到關於異常的消息。但我想隱藏錯誤的所有細節,並總是返回如下所示的簡單通知:「發生錯誤,無法處理請求」。

我試圖編寫SOAP擴展模塊,但我發現它沒有捕獲與asmx相關的異常。

那麼,有沒有可能,如果答案是'是',我應該做什麼?

似乎這個問題在stackaverflow上不時出現,但我無法找到決定。

回答

0

我不知道你已經看過關於SOAP擴展模塊的內容,但是這裏是a good example of one(它開始在文章的中間)。我希望它有幫助。

UPDATE

如果我理解正確的話,你是不是問沒收拋出您的服務代碼(我假設你已經在他們處理您的滿意)例外。相反,你正試圖趕上在ASP.NET通信堆棧錯誤,即

  • 序列化的客戶端對象到請求消息
  • 傳送請求消息發送到服務器
  • 反序列化請求消息轉換服務器端對象
  • ...和響應

反之如果是這樣的話,如果我是你,我只想離開它可以讓ASP.NET拋出任何異常則WAN ts到。我這樣說是因爲...

捕獲異常拋出之內你的服務代碼從安全的角度增加了真正的價值。通過返回SOAP錯誤中的最小細節,可以防止攻擊者學習太多關於服務的信息。這是任何Web服務的最佳實踐。

但是,捕捉從通信堆棧拋出的異常並不會增加我的意見。例如,攻擊者不會通過被告知「字段X預期爲xs:int而是通過xs:dateTime」來了解有關您的代碼的任何內容。他已經通過檢查WSDL知道了。

+0

感謝您的回答。但是您提供的文章中寫的是什麼:使用SOAPExtension意味着我們只捕獲SOAP未處理的異常 - 您將無法使用Web瀏覽器界面測試未處理的異常!請牢記這一點!出於這個原因,我在解決方案中包含了演示SOAP控制檯應用程序。 SOAP客戶端沒有瀏覽器界面,因此LogToUI選項不可用於Web服務,並且在這種情況下將被忽略。 – DotNetter 2012-01-10 08:49:19

+0

也許我不太準確,並沒有說,我的asmx被用作json服務來處理ajax請求 – DotNetter 2012-01-10 08:52:19

0

對於Web服務基礎設施發回的故障,您無能爲力。如果您使用的是WCF,那麼您將擁有非常完整的控制權,但您無法使用ASMX對此進行任何操作。