4

Castle Windsor(v3)を使用して依存性注入パターンで実装された.NET4.0WCFサービスがあります。このサービスはIIS7でホストされており、ローカルで実行する場合はVisual StudioDevelopmentServerを使用します。私の開発サーバーは、サービスに特定のポートを割り当てます。

ここで、ベースアドレスを追加しないと、CastleWindsorから次のような例外が発生します。

WebHttpBindingをバインドしているエンドポイントのスキームhttpに一致するベースアドレスが見つかりませんでした。登録されているベースアドレススキームは[]です。

ただし、開発者サーバーと同じポートでローカルホストアドレスを割り当てると、ポートの競合が発生します。

この場合、なぜベースアドレスが必要なのですか?また、ポートの競合をどのように処理しますか?

これが私のCastleWindsor関連のコードです。コンテナは、Global.asax.csファイルのApplication_Start()に作成されます。

public class ServiceInstaller : IWindsorInstaller
{
    public void Install(IWindsorContainer container, IConfigurationStore store)
    {
        container.AddFacility<WcfFacility>()
            .Register(Component.For<IMyService>().ImplementedBy<MyService>().AsWcfService<IMyService>().IsDefault()
        );
    }
}

また、私はいくつかのサービスをホストすることに興味がありません。1つだけです。

4

2 に答える 2

4

その答えは、Castle Project Google Group の Craig Neuwirt の功績によるものです。

IIS でホストされている場合は、おそらくホストされているとマークする必要があるため、次のようになります。

container.AddFacility<WcfFacility>() 
.Register(Component.For<IMyService>().ImplementedBy<MyService>().AsWcfService(new DefaultServiceModel().Hosted()).IsDefault()

記録として、Hally 卿の提案どおりに私の構成をセットアップしたところ、ポートの競合が発生しました。上記の流暢な構成を追加して、web.config からベース アドレス構成を削除しました。

于 2012-08-09T06:29:52.563 に答える
0

あなたの設定を見せてもらえますか?

IIS でサービスをホストする場合、ベース アドレスは、サイト、アプリケーション、およびポートによって異なります (現在のプロトコル - net.tcp、http の IIS バインディングによる)。

http ベースのサービス (net.tcp ではなく) に Visual Studio Development Server を使用できます。VS DevelopmentService の config でベース アドレスを指定できます (<service>タグ内) 。

    <host>
      <baseAddresses>
        <add baseAddress="http://localhost:8000/MyApp/Service.svc"/>
      </baseAddresses>
    </host>
于 2012-08-08T19:31:27.413 に答える