ロードバランサーの背後にあるWCF-セットアップ方法
-
06-07-2019 - |
質問
ロードバランサーを使用するいくつかの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を追加しようとしましたが、問題は解決しませんでした。
アイデアはありますか
解決
[ServiceBehavior(AddressFilterMode=AddressFilterMode.Any)]
この属性をサービスに設定すると、問題が解決します。
他のヒント
特定のロードバランサーとは何ですか? F5 BIG-IPを使用すると、かなり簡単に機能しますが、nlbの個々のマシンと同じポートと(相対)uriを使用していました(したがって、個々のマシンをファームと同じように扱うことができます)。明らかに各マシンの名前は異なりますが、このセットアップでは、ホストをスプーフィングすることで個々のサーバーをテストすることもできます。たとえば、HOSTSファイルを編集して[ファーム名]が[テストサーバーIP]を指すようにします。
私たちが抱えていた最大の痛みはSSLでした。 TransportWithMessageCredentialセキュリティを使用して、WCFはインバウンドHTTP接続を拒否します-そのため、nlbとサーバーノード間で再暗号化するためにnlbを設定する必要がありましたが、大したことではありません。
私たちが抱えていた他の唯一の問題は、IIS内でWCFをホストすることでした。これを修正するために、httpを完全に無視する(httpsのみでリッスンする)単純なカスタムファクトリを作成しました。
標準のポートでホストするのではなく、別のサイト(IP / host-header / etc)でホストすることで、より多くの喜びを得られるのではないかと思います。