1

MSMQ で実行されている WCF サービスのトランザクション タイムアウトを動的に設定できるようにする必要があります。MSDN の例に従っています: http://msdn.microsoft.com/en-us/library/system.servicemodel.dispatcher.channeldispatcher.transactiontimeout.aspx。ただし、設定しているタイムアウトは機能していないようです。

TransactionTimeoutプロパティを設定するために使用しているコードは次のとおりです。

ServiceProperties properties = ...; // has a TransactionTimeout value for the service
var serviceHost = new ServiceHost(...);
serviceHost.Open();
var channelDispatchers =
    serviceHost.ChannelDispatchers.Select(
        cd => new ChannelDispatcher(cd.Listener)).ToArray();
foreach (var channelDispatcher in channelDispatchers)
{
    channelDispatcher.TransactionTimeout = properties.TransactionTimeout;
}

サービスを実行し、サービスの実装に 2 分間の遅延を設定すると、別の MSMQ キューに書き込もうとすると、トランザクション登録エラーが発生します。

例外: キューへの送信中にエラーが発生しました: 指定されたトランザクションを登録できません。(-1072824232、0xc00e0058)。MSMQ がインストールされ、実行されていることを確認します。ローカル キューに送信する場合は、必要なアクセス モードと承認を備えたキューが存在することを確認してください。

過去にこれを機能させることができた人はいますか?どんなアイデアでも大歓迎です。

前もって感謝します。

4

1 に答える 1

0

私は正しいアプローチを考え出しました。これを行う正しい方法は、サービスの説明に添付されている ServiceBehaviorAttribute オブジェクトを見つけて変更することです。

var transactionTimeout = TimeSpan.FromSeconds(...);
var behavior = serviceHost.Description.Behaviors.Find<ServiceBehaviorAttribute>();
behavior.TransactionTimeout = transactionTimeout.ToString();
serviceHost.Open();
于 2013-10-06T04:37:42.823 に答える