.netwcferror-handlingwcf-4wcf-extensions

WCF IParameterInspector + IErrorHandler


If I have both IParameterInspector and IErrorHandler attached to a service can I be sure IErrorHandler.HandleError() will be called on the same thread where IParameterInspector.BeforeCall() is called?

I need this because in case of a fault thrown IParameterInspector.AfterCall() is never called and there is no way (as far as I know) I can get correlation state object created in BeforeCall(). So I hope to overcome this by having a ThreadStatic field in my implementation of the interfaces :(


Solution

  • You may want to utilize Instance Context Extensions.

    InstanceContextExtension: IExtension<InstanceContext>   
    OperationContext.Current.InstanceContext.Extensions.Find<InstanceContextExtension>()
    

    The instance context extension can be added in BeforeCall method. The instance context extension can then be retrieved in AfterCall method and used. Any operation specific data can be put in this extension object instead of introducing thread affinity.