1. ホーム
  2. .net

[解決済み] WCFサービス起動エラー "このコレクションには、スキームhttpを持つアドレスが既に含まれています。"

2022-04-15 05:12:19

質問

私は、WCFサービス契約とそのWCFサービスへの呼び出しを行うSilverlightコントロールを含むWebアプリケーションを構築しました。私の開発およびテストサーバー上で、それは素晴らしい動作をします。

本番サーバーにデプロイしてアプリケーションを実行すると、次のような例外が発生します。 System.ServiceModel.ServiceActivationException これは、コンパイル中に例外が発生したため、サービスをアクティブにできないことを意味します。 その例外とは

このコレクションには、スキームがhttpのアドレスが既に含まれています。このコレクションには、スキームごとに最大1つのアドレスが存在することができます。

私は、Webサイトに複数のホストヘッダがある場合、この例外がスローされる可能性があることを読みました。 IISでホストされているWCFサービスは、1つのベースアドレスしか持つことができないようです。 どうすればこの問題を回避できますか?

解決方法は?

概要

コードの解決策 これ

コンフィギュレーション・ソリューション ここで

の助けを借りて マイク・チャリイ コードでこれを行う方法について、いくつかの解決策を見つけました。 この問題は、私たちがライブ環境にデプロイするほとんどすべてのプロジェクトに影響を与えることになるので、私は純粋に設定による解決策を探しました。 最終的には、.net 3.0 と .net 3.5 でこれを行う方法を詳細に説明したものを見つけました。

このサイトから引用した、アプリケーションのウェブ設定を変更する方法の例は以下のとおりです。

<system.serviceModel>
    <serviceHostingEnvironment>
        <baseAddressPrefixFilters>
            <add prefix="net.tcp://payroll.myorg.com:8000"/>
            <add prefix="http://shipping.myorg.com:9000"/>
        </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
</system.serviceModel>

上記の例では net.tcp://payroll.myorg.com:8000 および http://shipping.myorg.com:9000 は のみであり、その基本アドレスは それぞれのスキームで を通過させることができる。そのため baseAddressPrefixFilterには、以下の機能はありません。 はワイルドカードをサポートしています。

IISが提供するbaseAddressesは は、他のスキームにバインドされたアドレスを持っています。 に存在しない。 のリストがあります。これらのアドレスは がフィルタリングされます。

Dnsソリューション(未検証)。 もし、あなたのウェブアプリケーションに固有の新しい dns エントリを作成し、新しいウェブサイトを追加し、dns エントリに一致する単一のホストヘッダを与えれば、この問題は完全に軽減され、カスタムコードを書いたり web.config ファイルにプレフィックスを追加する必要はなくなると思います。