So, I found a compromised solution. I still use the IDispatchMessageInspector implementation from the link above, but I am debugging the extension in a different way.
Here is a snippet of the original implementation
public void BeforeSendReply(ref Message reply, object correlationState) { var extensions = OperationContext.Current.InstanceContext.Extensions.FindAll<UnitOfWorkContextExtension>(); foreach (var extension in extensions) { OperationContext.Current.InstanceContext.Extensions.Remove(extension); } }
I leave the BeforeSendReply message blank (as happens before serialization), but instead, inside AfterReceiveRequest I can specify an instance of Context.Closing and detach extension in the event handler
public object AfterReceiveRequest(ref Message request, IClientChannel channel, InstanceContext instanceContext) { instanceContext.Extensions.Add(new UnitOfWorkContextExtension(ServiceLocator.IoC.Retrieve<IUnitOfWorkFactory>().Create())); instanceContext.Closing += DetachExtension; return null; }
source share