2

MSMQ 通信を使用する WCF サービスがあります。ローカル ネットワークでサービスを実行すると、クライアント構成ファイルでサービス エンドポイントがホスト コンピューターを指すように構成されます。たとえば、サービス ホストで指定されたエンドポイントが次の場合です。

<endpoint address="net.msmq://localhost/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

このエンドポイントにメッセージを送信するようにクライアントを構成します。

<endpoint address="net.msmq://192.168.1.5/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
          <identity>
            <dns value="localhost" />
          </identity>
        </endpoint>

明らかに 192.168.1.5 はホスト コンピューターの IP であり、これは魅力的に機能します。私は IIS 7 でサービスをホストし、IIS で MSMQ リスナーを有効にし、適切なアクセス権を付与します ( Tom Hollanders の記事のほとんどすべて)。また、ブラウザーで http 経由でサービスにアクセスすることもできますが、私のクライアントを作成するときは、サービスは IIS でホストされ、クライアントApp.configでエンドポイントを構成します。当然、クライアントを次のように構成します。

<endpoint address="net.msmq://ServiceHostPublicIP/private/MsmqService/MyMsmqService"
         binding="netMsmqBinding" bindingConfiguration="test" contract="MsmqService.IMyMsmqService">
        <identity>
            <dns value="localhost" />
        </identity>
</endpoint>

それは物事がうまくいかないところです。送信したメッセージは、クライアント マシンの送信キューに入れられ続けます。DIRECT=OS:[ServiceHostPublicIP]\private$\MsmqService\MyMsmqService キューの状態は常に「接続待ち」です。キュー転送プロトコルを に設定しようとしました。SRMPキュー名は IIS で必要なサービス名と同じで、キューに適切なアクセス許可を与えました。最近、この問題に遭遇した人はいますか? 何か案は?だれかが MSMQ over HTTP の実際のサンプルを共有できれば、それは素晴らしいことです。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

4

私はこれを修正することができました、私のメッセージはクライアントマシンの送信キューでスタックしていました、「DIRECT = TCP:HOSTSERVERIP \ private $ \ MsmqService / MyMsmqService.svc」キューの状態は「接続を待っています」であり、次のホップは宛先サーバーのパブリックIPであったため、クライアントは宛先サーバーのパブリックIPにpingを実行できたとしても、宛先キューに接続できませんでした。MSMQが着信トラフィックをリッスンするために使用するポート1801は、サービスホストマシンが存在するネットワークのルーター。ポート1801を開いた後、すべてが魅力のように機能しています。これは非常に根本的な問題であるため、多くの人が記事やチュートリアルでわざわざ言及していなかったと思います。これが後で誰かに役立つことを願っています。

于 2012-02-29T08:05:41.990 に答える