4

ロードバランサーを使用する Web サーバーがいくつかあります。マシンはポート 81 で IIS6 を実行しています。外部からは、ポート 80 を使用してサイトにアクセスできます。外部名とマシンの名前は異なります。

私たちは得ています

System.ServiceModel.EndpointNotFoundException: The message with To '<url>' cannot be processed at the receiver, due to an AddressFilter mismatch at the EndpointDispatcher. Check that the sender and receiver's EndpointAddresses agree.

web.config の関連部分は次のとおりです。

  <endpoint binding="ws2007HttpBinding" bindingConfiguration="MyServiceBinding"
    contract="MyService.IMyService" listenUriMode="Explicit" />

listenUri を追加しようとしましたが、問題は解決しませんでした。

何か案は?

4

2 に答える 2

7
[ServiceBehavior(AddressFilterMode=AddressFilterMode.Any)]

この属性をサービスに配置すると、問題が解決します。

于 2009-01-27T11:03:03.433 に答える
1

特定のロードバランサーとは何ですか?F5 BIG-IPを使用すると、かなり簡単に動作するようになりましたが、nlbで個々のマシンと同じポートと(相対)URIを使用していました(したがって、必要に応じて、個々のマシンをファームと同じように扱うことができます)。明らかに、各マシンには異なる名前がありますが、この設定では、ホストをスプーフィングすることによって個々のサーバーをテストすることもできます。たとえば、[ファーム名]が[テストサーバーIP]を指すようにHOSTSファイルを編集します。

私たちが抱えていた最大の苦痛はSSLでした。TransportWithMessageCredentialセキュリティを使用すると、WCFはインバウンドhttp接続を拒否します(したがって、nlbとサーバーノード間で再暗号化するようにnlbを設定する必要がありました)が、大したことではありません。

私たちが抱えていた他の唯一の問題は、IIS内でWCFをホストすることであり、WCFはhttp(ただし、httpsでは問題ありません)で目的のサイトを正しく識別できませんでした(IISは問題ありませんでした)。これを修正するために、httpを完全に無視する(httpsでのみリッスンする)カスタムファクトリを作成しました。これは、とにかくTransportWithMessageCredential要件と適切に連携しているため、これに悩まされることはありませんでした。

標準のポートではなく、別のサイト(IP / host-header / etc)としてホストすることで、より多くの喜びを得ることができるのではないかと思います。

于 2008-11-04T10:46:17.640 に答える