2009-08-20 5 views
1

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

私は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用に開かれました。 Windows 2008とMSMQに関する多くの情報を見つけるのは難しいです。

EDIT:キュー名は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; 

... 
    } 
} 

おかげ

+0

あなたのコードやキューの設定を投稿することがあります。 MSMQは、キュー名の書式設定に煩わされる可能性があります。 – Web

+0

しかし実際の名前は何ですか? (http://technet.microsoft.com/en-us/library/cc778392(WS.10).aspx)。私はそれが取引に関係していると思います。 (MSDTC)。しかしそれを使ったことはありません。ごめんなさい。 –

+0

申し訳ありません...ここで使用されているキュー名は、FormatName:DIRECT = OS:dev-msmq1 \ SendEmailおよびFormatName:DIRECT = OS:dev-msmq1 \ LogEventです。 –

答えて

1

私は解決策を見つけました:すべてをすべて放棄し、WCFとnet.Msmqバインディングを使用するように切り替えます。今、キューの通信は正常に動作しています。 IPv4のを実行している場合、ファイアウォールを介してのみ、MSDTCおよびMSMQを許可するだけで完全なものにするため

0

リモート・トランザクションがプレイしているので、両方のマシンがMSDTCを実行している必要があります、次のように私のコードの該当部分があります。

This blog article offers a tiny hint...

ファイアウォールが遊びであってもよいので、ポート1801(MSMQ)が両側に開いていることを確認してください。

+0

上記の両方のマシンが実際にMSDTCを実行しています。他のアイデア? –

0

両方の時計が同期していることを確認してください。私はこの前に、サーバーとクライアントが1分ごとにオフになっているため、認証が失敗する場所を見ました。これは、キューがパブリックであり、すべてのユーザーにアクセス権がある場合でも発生します。

0

が、十分ではありません。

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

私はDTCPingで見られるのと同じエラーで苦労しました。私のケースでは、ICMPトラフィックをブロックするファイアウォールによってトリガーされることが判明しました。

関連する問題