6

WCF サービスに接続する Silverlight アプリケーションがあります。私が慣れ親しんでいる基本的な構成では、このアプリケーションを対応する WCF サービスに問題なく接続できます。

しかし、最近、私のクライアントの 1 つが Apache リバース プロキシの使用を開始しました。このプロキシは公開サーバーであり、クライアントとサーバーの間を行き来する SSL (HTTPS) を介して HTTP トラフィックを暗号化するためにのみ使用されます。このプロキシは、そこからのすべてのトラフィックを、アプリケーションをホストする実際の Web サーバーに渡します。パブリック プロキシと IIS サーバー間のトラフィックは、単なる HTTP です。

したがって、トラフィックは次のように流れます: エンドユーザー ブラウザー ---HTTPS----> パブリック リバース プロキシ -----HTTP----> WCF サービスをホストする IIS サーバー。

リバース プロキシと IIS は、2 つの別個のサーバー上にあります。

Silverlight アプリケーションを正しく機能させることができません。エンドポイントの構成方法がわかりません。パブリック プロキシのアドレスをエンドポイント アドレスとして使用すると、常に問題が発生します。

通常、Silverlight アプリケーションの構成は次のとおりです。

<configuration>
    <system.serviceModel>
        <bindings>
            <basicHttpBinding>
                <binding name="BasicHttpBinding_IPOTemplateEditorSrv" maxBufferSize="2147483647"
                    maxReceivedMessageSize="2147483647">
                    <security mode="TransportWithMessageCredential" />
                </binding>
            </basicHttpBinding>
        </bindings>
        <client>
            <endpoint address="https://public-reverse-proxy-url/POTemplateEditorSrv.svc"
                binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IPOTemplateEditorSrv"
                contract="POEditorSrvRef.IPOTemplateEditorSrv" name="BasicHttpBinding_IPOTemplateEditorSrv" />
        </client>
    </system.serviceModel>
</configuration>

私が使用していて、リバース プロキシのパブリック HTTPS アドレスを指しているエンドポイント アドレスがあることに注意してください。

何か不足していますか?おそらくプロキシを構成するための追加情報はありますか? Silverlight クライアントをサービスに接続させる回避策はありますか?

4

1 に答える 1

5

おそらく、この答えは少し明白すぎるかもしれませんが、WSDL が内部ホスト名を WCF アドレスとしてアドバタイズしているように思えます (そのアドレスが実際のパブリック アドレスではない場合)。IIS は WSDL を生成しているため、エンドポイント アドレスにそのホスト名を使用するだけです。これは必要ではなく、プロキシのアドレスが必要です。

WSDL ファイルの静的コピーを作成して、それを Web サーバーに公開してみてください。すべての参照を内部ホスト名に置き換えて、パブリック プロキシ ホスト名に置き換えてください。次に、静的 WSDL を指すように WCF クライアント構成を変更します。ここで簡単な説明を見つけることができます: Supply a different endpoint address in the WSDL of a WCF Web service

それでもうまくいかない場合は、スニファ (wireshark) を使用して送受信される内容をキャプチャしてみてください。HTTPS を無効にすることは、方程式から削除する必要があるかもしれません。Web サービス要求がプロキシに送信されているように見えますが、プロキシは要求を適切に処理できません。これは、スニッフィング ツールを試すのに最適なシナリオです。

Web ブラウザーを使用して SVC に直接要求を行うと、要求は次のようになります。

GET /POTemplateEditorSrv.svc HTTP/1.1
Host: public-reverse-proxy-url

しかし、Silverlight 経由で送信すると、次のようになります。

GET /POTemplateEditorSrv.svc HTTP/1.1
Host: private-server-address

これは、プロキシを混乱させるのに十分なほど微妙な違いである可能性があります。

于 2012-09-04T23:03:48.213 に答える