2

IIS6(Windows Web Server 2003)でホストされている、長い間機能しているWCFサービスがあります。

IIS に 2 番目のホスト ヘッダー値を追加しようとしています (以前は 1 つしかありませんでした)。

IISで、次のように構成したとしましょう。

IP: All Available, Port: 80, Host: x.test.com
IP: All Available, Port: 80, Host: y.test.com

私のアプリケーションでは、次の WCF 構成プロパティを設定しています。

<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>

そして、私にはカスタムがありますServiceHostFactory

public class MySuperServiceHostFactory : ServiceHostFactory
{
    protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
    {
        //...
    }
}

パラメーターUri[] baseAddressesでは、WCFは、IIS 構成の最初の値が何であれ、私を渡すだけのようです。したがって、この例でbaseAddressesは、Uri[1]は 1 つの値を持つ ですhttp://x.test.com/MyService.svc


IIS で HTTPおよびHTTPS ホスト ヘッダーを指定すると、同じことが起こります。同じ例に戻って、設定した HTTP トラフィックについて考えてみましょう。

IP: All Available, Port: 80, Host: x.test.com
IP: All Available, Port: 80, Host: y.test.com

SSL トラフィックの場合は、次のコマンドを実行します。

cscript.exe c:\Inetpub\AdminScripts\adsutil.vbs set /w3svc/12345/SecureBindings ":443:secureA.test.com" ":443:secureB.test.com"

これで、私のサイトには 4 つのアドレスが表示されるはずです。

ただし、現在、WCFは各タイプの接続から最初のホストを渡すだけなので、 2 つの要素が含まれるようになりました。Uri[]

http://x.test.com/MyService.svc
https://secureA.test.com/MyService.svc

なぜこれが起こるのか、誰にも洞察がありますか?


編集:

このリンク「WCF は、サイトごとに指定された複数の IIS バインディングをどのようにサポートできますか?」 の一番下に、次のように書かれています。

.Net Fx4.0 でのソリューション: BaseAddressPrefixFilters

Beta2 修正

.NET Framework の現在の Beta2 リリースでは、複数のサイト バインディングのサポートが追加されました。IIS サイトでバインドを設定するだけで、サービスはアドレスを継承します

最終RTM修正

最終的に、アプリケーションの互換性の理由から、オプトインにすることにしました。複数のサイト バインドを有効にするには、アプリケーションで multipleSiteBindingEnabled を true に設定する必要があります。マルチ サイト バインディングは、HTTP プロトコルでのみサポートされています。構成ファイル内のエンドポイントのアドレスは、完全な URI である必要があります。3.0 または 3.5 の回避策を 4.0 に移植する場合、この特定の側面を維持する必要があります。

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" />

その最後のビットは、私がやっていることです。.NET4 の追加機能を使用して、IIS で複数のホスト ヘッダーをmultipleSiteBindingsEnabled="true"設定し、構成に設定しています。

これは、WCF の残りの部分をそのままにして、サービス エンドポイントを構築するための既定の処理を実行させると、実際には正常に機能します。

ただし、私の問題は、すべての複数のホスト ヘッダーが実際にはカスタムServiceHostFactory実装に渡されないことです。そのため、すべてのベース アドレスに独自のエンドポイントを手動で設定することは困難または不可能に思えます。

おそらく、これは .NET 4 の単なるバグでしょうか?

4

1 に答える 1

0

カスタム クラスで、他のエンドポイントを手動で追加していますか? 手動で行う必要があるように設計されていると思います...

http://msdn.microsoft.com/en-us/library/ms751515.aspxを参照してください。

この概念では、EndPoint が構成である場合、それが追加されるようです。構成が空であるため、エンドポイントを手動で追加する必要があります。

「 WCF セルフ ホスト サービス - C# のエンドポイント」を参照してください。

于 2012-05-20T20:04:56.623 に答える