1

我在我的WCF服務中實現了ClaimsAuthenticaitonManager,以接受來自我們企業ADFS的傳入聲明,並將它們轉換爲與系統用戶相關的聲明(或者如果AD用戶生成未經授權的響應未註冊爲系統的一部分)。這些轉換後的聲明是通過查詢應用程序數據庫生成的,我希望通過在Authenticate方法中返回503狀態來解決網絡連接問題的可能性,以防無法訪問數據庫來轉換聲明。如何處理ClaimAuthenticationManager期間的錯誤。驗證

首先,這是一個合理的方法,其次,是否有可能在請求管道中的這一點做這樣的事情,我將如何去做呢?

回答

1

在WCF SOAP服務中執行此操作的正確方法是使用自定義ErrorHandler。不管你是否使用WIF,都是這種情況。

自定義錯誤處理程序實現IErrorHandler。這允許您的服務拋出異常,這些異常由WCF傳遞給您的註冊自定義錯誤處理程序。這使您可以檢查異常並創建適當的故障。

就你而言,你可能會拋出來自你的SQL客戶端的異常。除了創建正確的錯誤,您還可以執行任何其他相關操作(例如,通常記錄錯誤)。

IErrorHandler這兩種方法是

ProvideFault(Exception error, MessageVersion version, ref Message fault),讓您inpsect拋出的異常,並修改或創建正確的故障。

而且

HandleError(Exception error)的響應返回給客戶端後調用它。這是你可以做記錄錯誤的地方。關於如何實現這一

詳情可

http://blogs.msdn.com/b/carlosfigueira/archive/2011/06/07/wcf-extensibility-ierrorhandler.aspx

錯誤處理程序被發現可以很容易地使用代碼,如上面的鏈接進行接線。通過實現自定義服務行爲擴展,使用web.config可以連接一些額外的工作。如何做到這一點的例子可以在

http://weblogs.asp.net/pglavich/archive/2008/10/16/wcf-ierrorhandler-and-propagating-faults.aspx

找到如此說來,通常用於SOAP服務,你就不會直接返回的HTTP狀態代碼(即503種狀態)。相反,您會將錯誤包裝在FaultException中並返回。

對於WCF REST,你只拋出一個WebFaultException和內置的錯誤處理程序爲webHttpBinding將處理轉變爲一個HTTP錯誤:

http://blogs.msdn.com/b/endpoint/archive/2010/01/21/error-handling-in-wcf-webhttp-services-with-webfaultexception.aspx

+0

感謝您的詳細答覆。今天早上我會拍這張照片。 – lsuarez

+0

從一般的錯誤處理角度來看,這種方法非常有用,並且聲明轉換的具體情況確實發生在處理程序的管道中。有些博客有點過時,並且將IErrorHandler實現爲[BehaviorExtensionElement](http://msdn.microsoft.com/en-us/library/System.ServiceModel.Configuration.BehaviorExtensionElement.aspx)非常吸引人。一個示例用法列出[here](http:// msdn。microsoft.com/en-us/library/system.servicemodel.dispatcher.ierrorhandler.aspx)。 – lsuarez