net.msmq バインディングで WAS を使用して IIS でホストされているサービスがあります。このサービスは、プライベート トランザクション MSMQ キューからメッセージを読み取ります。サービスとは別のマシンにあるキューから読み取ることで機能する必要があります。キューが同じマシン上にある場合は機能しますが、別のマシン上にある場合は機能しません。
環境情報
- サーバーは Windows Web Server 2008 R2 を実行しています。
- サーバーはワークグループ内にあります。つまり、サーバーはドメインの一部ではありません。
- MSMQ は、ディレクトリ サービス統合機能なしでインストールされています。
- 必要な Windows 機能 (WCF Non-Http Activation および Http Activation、Message Queuing Server、Multicasting Support、Message Queuing DCOM Proxy、Windows Process Activation Service、.NET Environment、構成 API) がインストールされていると思います。
- マシンで次のレジストリ変更を行いました。
- NewRemoteReadServerAllowNoneSecurityClient = 1
- NewRemoteReadServerDenyWorkgroupClient = 0
- AllowNoauthenticatedRpc = 1
- DTC が有効になり、[ネットワーク DTC アクセス]、[リモート クライアントを許可]、[インバウンドを許可]、[アウトバウンドを許可]、[認証は不要]、[SNA LU 6.2 トランザクションを有効にする] がすべて選択されています。
- ファイアウォールの変更が行われました。
サービス構成情報
- netMsmqBinding を使用しています。
- netMsmqBinding のトランスポート セキュリティ モードは None です。
- ExactlyOnce は真です
- UseActiveDirectory は false
- 耐久性は本当です
- キュー アドレスは net.msmq://the-host-computer-name/private/EmailAsyncService です。
WCF ロギング
- 警告があります:
キューがトランザクションかどうかを検出できません". エラーのキューの FormatName は DIRECT=OS:ホスト コンピュータ名\private$\EmailAsyncService です。
- 次にエラーがあります:
'the-host-computer-name\private$\EmailAsyncService' > キュー パス名を形式名に変換するときにエラーが発生しました: 認識できないエラー -1072824300 (0xc00e0014)。キューに入れられたチャネルに対するすべての操作が失敗しました。キュー アドレスが有効であることを確認してください。MSMQ は、Active Directory 統合を有効にしてインストールする必要があり、アクセスできる必要があります。
私が試したこと
- MessageQueue インスタンスを手動で作成して使用すると、サービスが稼働しているマシンからリモート キューからメッセージを読み取ることができます。
- サービスをスタンドアロンのコンソール アプリケーションとしてホストしようとしました。エラーメッセージは同じです。
- 関連するファイアウォールを無効にしようとしました。
- http://msdn.microsoft.com/en-us/library/ms752246.aspxで変更を試みました。これは、ワークグループに参加しているコンピューターでそのようなサービスを実行することに関連しています。(「アクティブ化サービスとワーカー プロセスの両方を特定のユーザー アカウントで実行する必要があり (両方で同じである必要があります)、キューには特定のユーザー アカウントの ACL が必要です。ワークグループでは、サービスは無制限のアカウントを使用して実行する必要があります。 token.") 現在使用しているユーザー アカウントは Network Service です。
いくつかの考え
- ファイアウォールやアクセス許可の問題があるとは思いません。
- サービス構成で UseActiveDirectory が false に設定されているにもかかわらず、net.msmq://the-host-computer-name/private/EmailAsyncService のキュー アドレスが the-host-computer-name\private$ に変換されているようです\EmailAsyncService、これは私の知る限り、Active Directory を介した検索が必要な名前形式です。