0

さまざまな外部ベンダーと統合するために、多数(50以上)のWCFサービスホスト(C#で記述、Win 2008R2 / IIS 7.5で実行)を使用してWebアプリケーションを実行します。これらの各ホストに、管理用の別のサービスを追加したいと思います。このサービスは、統合プロジェクトから参照できるライブラリで定義する単一のサービス定義を持つのに十分なジェネリックにすることができます。しかし、実際にエンドポイントを構成にのみ追加する方法はありますか?つまり、.svcファイルの追加を避け、web.configservice-sectionに一部の行のみを追加したいと思います。

web.configこれを:に追加してみました

<service name="Contracts.AdminService">
  <endpoint address="AdminService" contract="Contracts.IAdminService" binding="basicHttpBinding" />
</service>

ただし、これは機能しません。.svc以下のような単純なファイルを追加すると、機能します

<%@ ServiceHost Language="C#" Debug="true" Service="Contracts.AdminService" CodeBehind="Contracts.AdminService.cs" %>

ただし、新しいホストを設定するときに間違いが発生する可能性が低くなるように、これは避けたいと思います(構成ファイルを使用してすでに多数の自動処理を行っているため、新しいサービスを追加するのは簡単です)。これは可能ですか?欠点はありますか?

4

2 に答える 2

1

しばらくして自分で答えを見つけました。解決策は、WCF4のファイルレスアクティベーションです。これで、これを自分のweb.config:に追加できます。

<serviceHostingEnvironment aspNetCompatibilityEnabled="true"
    multipleSiteBindingsEnabled="true">
  <serviceActivations>
    <add relativeAddress="AdminService.svc" service="Contracts.AdminService"/>
  </serviceActivations>
</serviceHostingEnvironment>

この後、に移動してサービスにアクセスできますhttp://<hostname>/<path>/AdminService.svc

于 2012-06-03T19:21:24.853 に答える
-1

WCFサービスはServiceHostでホストされます。

IIS / WASでWCFをホストしていない場合は、IIS / WASの両方がユーザーに代わってServiceHostと対話するため、ServiceHostsを手動で作成する必要があります。

IISの.svcファイル内で基本的に行っていることは、新しいServiceHostをインスタンス化することです。

ServiceHostは単一のサービスタイプしかホストできないため、管理用に新しいタイプのサービスを作成する場合は、それらの新しいタイプごとにサービスホストが必要になります。

したがって、質問に対する簡単な答えは、作成する新しいサービスの情報をweb.configに追加するだけでなく、ServiceHostをインスタンス化するメカニズムも必要であるということです。

于 2012-06-03T15:11:50.640 に答える