ジョブサーバー: Windows Server 2008 R2 .NET バージョン: 4.5
appとqueueの 2 つのサーバーを接続するために WCF を使用しています。アプリがqueueからメッセージを送受信できるようにしたい。何らかの理由で、アプリはメッセージを送信できますが、受信できません。
netMsmq バインディングは次のようになります。
<binding name="JobExecutionerBinding" receiveErrorHandling="Move">
<security>
<transport msmqAuthenticationMode="None" msmqProtectionLevel="None" />
</security>
</binding>
サービス バインディングは次のようになります。
これで、クライアント バインディングは次のようになります。
<endpoint address="net.msmq://queue/private/jobs"
binding="netMsmqBinding"
bindingConfiguration="JobExecutionerBinding"
contract="JobExecution.Common.IJobExecutionService"
name="SimpleEmailService"
kind=""
endpointConfiguration=""/>
セキュリティのためにいくつかの名前を変更しました。
したがって、WC クライアントは問題なくリモート キューに送信できます。送信メッセージを適切にキューに入れ、後でリモート キュー サーバーがダウンした場合に転送します。しかし、WCF サービスを起動するたびに、次のようになります。
キューを開くときにエラーが発生しました。MSMQ がインストールされて実行されていること、キューが存在すること、読み取り元として適切な権限があることを確認してください。内部例外には追加情報が含まれる場合があります。---> System.ServiceModel.MsmqException: キューを開いているときにエラーが発生しました: キューが存在しないか、操作を実行するための十分な権限がありません。(-1072824317、0xc00e0003)。メッセージをキューから送受信できません。MSMQ がインストールされ、実行されていることを確認します。また、必要なアクセス・モードと許可でキューを開くことができることも確認してください。System.ServiceModel.Channels.MsmqQueue.OpenQueue() で System.ServiceModel.Channels.MsmqQueue.GetHandle() で System.ServiceModel.Channels.MsmqQueue.SupportsAccessMode (文字列 formatName、Int32 accessType、MsmqException&
私は 8 時間、StackOverflow とインターネットのいたるところにいました。これが私がやったことです:
- ANONYMOUS LOGIN、Everyone、Network、Network Service、および Local Service が完全に制御できることを確認
- リモート MSMQ サーバーを停止し、WCF サービスの動作を観察したところ、別のエラーが表示されたので、起動時に WCF サービスが MSMQ サーバーと通信していることは確かです
- 両方のボックスで Windows ファイアウォールを無効にし、EC2 セキュリティ グループを介してすべてのポートを開きました
- レジストリで AllowNoauthenticatedRpc と NewRemoteReadServerAllowNoneSecurityClient を 1 に設定します。
- 両方のサーバーで MS DTC を構成しました (キューはトランザクション対応ですが、キューがトランザクション対応かどうかに関係なく同じエラーが発生します)
- ローカルキューを使用するとWCFサーバーが正常に起動し、問題なく受信できることを確認
ヘルプ!!!リモート キューイング ソリューションなしではアプリをスケーリングできません。