[英]WCF IParameterInspector + IErrorHandler
如果我同時將IParameterInspector
和IErrorHandler
附加到服務,是否可以確保在調用IErrorHandler.HandleError()
的同一線程上IParameterInspector.BeforeCall()
?
我之所以需IParameterInspector.AfterCall()
,是因為在發生錯誤的情況下,永遠不會調用IParameterInspector.AfterCall()
而且也無法(據我所知)我可以在BeforeCall()
創建關聯狀態對象。 因此,我希望通過在我的接口實現中使用ThreadStatic
字段來克服這一問題:(
您可能要利用實例上下文擴展。
InstanceContextExtension: IExtension<InstanceContext>
OperationContext.Current.InstanceContext.Extensions.Find<InstanceContextExtension>()
實例上下文擴展可以添加在BeforeCall
方法中。 然后可以在AfterCall
方法中檢索實例上下文擴展並使用。 可以將任何特定於操作的數據放在此擴展對象中,而不用引入線程親緣關系。
您可以讓實現IErrorHandler的類也實現IParameterInspector。 然后,您可以將對相關狀態的引用和輸入參數存儲為類變量。 然后可以從HandleError方法中訪問它們。 每當發生未處理的異常時,我目前都在使用它來記錄輸入參數和原始消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.