は、だから私は妥協し解決策を見つけました。 私は上記のリンクから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);
}
}
からスニペット(それがシリアル化の前に起こるように)Iが空BeforeSendReplyメッセージを残しているが、代わりにAfterReceiveRequestの内部IはinstanceContext.Closingにsuscribeとイベントハンドラ
で拡張をデタッチ
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;
}
あなたは最高です。この答えを見つける前に、私は一日中同じ質問に苦しんでいました。 +1! – dvdvorle