2

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 を介した検索が必要な名前形式です。
4

1 に答える 1

0

ここで少し遅れましたが、他に答えがないので、まだ助けになるかもしれません.

ワークグループ モードで動作するには、証明書をいじる必要があると思われるため、ディレクトリ サービス統合を有効にしてみてください。

また、Juval Lowy の WCF ブックでは、WAS でホストされているサービスをキューに入れている場合、svc ファイルへの仮想パスとまったく同じ名前をキューに付ける必要があることを明確にしています。そのため、サービスが実際に /EmailAsyncService/EmailService.svc でホストされている場合は、キューに名前を付ける必要があります (最初のスラッシュなし)。

于 2012-04-11T18:13:27.043 に答える