2

Windows Server 2008でC#を使用していますが、同じドメイン内の別のマシンのパブリックトランザクションキューからメッセージを受信したいと考えています。エラーは次のようになります。

System.Messaging.MessageQueueException: Cannot import the transaction.
   at System.Messaging.MessageQueue.ReceiveCurrent(TimeSpan timeout, Int32 action, CursorHandle cursor, MessagePropertyFilter filter, MessageQueueTransaction internalTransaction, MessageQueueTransactionType transactionType)
   at System.Messaging.MessageQueue.Receive(TimeSpan timeout, MessageQueueTransactionType transactionType)
   at JobManagerLib.JobProcessor.Process(Action waitForNewMessageCallback) in C:\Dev\OtherProjects\POC\WindowsService\JobManagerSample\JobManagerLib\JobProcessor.cs:line 132

私はDTCPingを試しました。これは、一方の方向では成功しますが、もう一方の方向では失敗します。ログの関連部分は次のとおりです。

++++++++++++hosts      ++++++++++++
127.0.0.1       localhost
::1             localhost

08-20, 15:47:22.739-->Error(0x424) at clutil.cpp @256
08-20, 15:47:22.739-->-->OpenCluster
08-20, 15:47:22.739-->-->1060(The specified service does not exist as an installed service.)
++++++++++++++++++++++++++++++++++++++++++++++
     DTCping 1.9 Report for DEV-MSMQ2  
++++++++++++++++++++++++++++++++++++++++++++++
RPC server is ready
++++++++++++Validating Remote Computer Name++++++++++++
08-20, 15:47:26.207-->Start DTC connection test
Name Resolution:
    dev-msmq1-->192.168.22.11-->Dev-msmq1
08-20, 15:47:26.222-->Start RPC test (DEV-MSMQ2-->dev-msmq1)
RPC test failed

なぜこれが失敗するのか誰かが知っていますか?WindowsファイアウォールがMSDTC用に開かれました。Windows2008とMSMQに関する多くの情報を見つけるのは難しいです。

編集:キュー名は、FormatName:DIRECT = OS:dev-msmq1 \ getmap、およびFormatName:DIRECT = OS:dev-msmq1\logeventです。それらはパブリックなトランザクションキューであり、Everyoneはそれらに対するピーク/受信権限を持っています。私のコードの適切な部分は次のとおりです。

using (TransactionScope tx = new TransactionScope(TransactionScopeOption.RequiresNew))
{
    using (var queue = new MessageQueue(QueueName))
    {
        queue.Formatter = new XmlMessageFormatter(new string[] { _targetParameterType });
        var message = queue.Receive(TimeOut, MessageQueueTransactionType.Automatic);
        string messageId = message.Label;

...
    }
}

ありがとう

4

3 に答える 3

1

だから私は解決策を見つけました:すべてを完全に放棄し、WCFとnet.Msmqバインディングの使用に切り替えます。これで、キュー通信は正常に機能しています。

于 2009-10-09T16:50:17.403 に答える
0

両方のマシンのクロックが同期していることを確認してください。サーバーとクライアントが1分ずれているために認証が失敗する前に、これを見ました。これは、キューがパブリックであり、すべてのユーザーに対するアクセス許可を持っている場合でも発生します。

于 2009-09-02T17:47:58.833 に答える
0

完全を期すために、IPv4を実行する場合、ファイアウォールを通過するMSDTCとMSMQのみを許可するだけでは不十分です。

ICMPトラフィックもファイアウォールを通過させる必要があります(IPv6はファイアウォールに関係なくホスト名を解決できますが、DTCPIngログはIPv4を実行していることを示します)。

私はDTCPingで見られるのと同じエラーに苦しんでいます、そして私の場合、それはICMPトラフィックをブロックしているファイアウォールによって引き起こされたことがわかりました。

于 2009-11-22T16:36:45.803 に答える