Итак, я нашел скомпрометированное решение.Я все еще использую реализацию IDispatchMessageInspector по ссылке выше, но выполняю отсоединение расширения другим способом.
Вот фрагмент из исходной реализации
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);
}
}
Я оставляю сообщение BeforeSendReply пустым(как это происходит до сериализации), но вместо этого внутри AfterReceiveRequest я добавляю экземпляр instanceContext.Closing и отсоединяю расширение в обработчике событий
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;
}