2015-05-01 64 views
0

我有一堆WCF SOAP服務在服務主機中配置ServiceCredentials行爲以使用System.IdentityModel來驗證傳入聲明令牌。SecurityExceptions未在WCF服務中捕獲

相同的服務主機配置IErrorHandler以捕獲服務中引發的任何異常。這個FaultHandler被連接到服務中的每個通道調度程序。

問題是System.IdentityModel標記驗證代碼在檢測到無效標記時拋出System.SecurityException,但此異常未被FaultHandler捕獲(因此未記錄)。

爲什麼這些異常沒有被IErrorHandler捕獲?我怎樣才能確保這些例外記錄?

This answer指向相同的問題,但不提示解決方案。

This comment表明它是預期的,但我不明白這是爲什麼。

+0

可以,如果你和wcf記錄一起使用,它會記錄wcf的所有內部錯誤,我想我們應該使用它https://msdn.microsoft.com/en-us/library/ms733025(v=vs.110).aspx – nhabuiduc

+0

打開WCF跟蹤是我找到拋出異常的方式,但它不能縮放到生產。我們有集中的異常日誌記錄是有原因的。 – MvdD

+0

我相信安全異常是由WCF運行時觸發的,即使在你的服務類(實現了實際的服務代碼,也是「IErrorHandler」接口)之前。既然這些發生在你的服務類被實例化之前,那麼它應該如何捕獲並處理這個錯誤呢? –

回答

1

我相信安全異常是由WCF運行時觸發的,甚至在您的服務類(實現實際服務代碼以及IErrorHandler接口)之前觸發。

由於這些發生在你的服務類甚至被實例化之前,它應該如何捕獲並處理該錯誤呢?這是呼叫類在撥打電話時需要處理的事情(類似於超時等)

+0

當然,客戶端會記錄捕獲到的異常,但是傳播的異常不包含最初拋出的異常的內部異常。這個內在的例外就是它首先被提出的真正原因。 – MvdD