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 の単なるバグでしょうか?