2

ASP.NET または WCF 用の Visual Studio プロジェクトは、通常、IIS アプリケーションと 1 対 1 で割り当てられます。しかし、たとえば、IIS 内の同じアプリケーション ドメインで 2 つの WCF プロジェクトをホストしたい場合はどうすればよいでしょうか。これは、1 つの IIS アプリケーションに 2 つの Visual Studio WCF プロジェクトを割り当てることを意味します。

これを試し始めたところ、最初のエラー メッセージが表示されました。「これをしてはいけない」というコメントを見たことがあります。しかし、私の場合、私は実際にこれをやりたいと思っています。これが IIS アプリケーションの 3 つの Web 構成 (IIS アプリのルートに 1 つ、含まれる「プロジェクト」フォルダー内の 2 つ) を持つことを意味するのか、IIS アプリケーションの Web 構成を 1 つだけ持つことを意味するのかは気にしません。 .

そこで、私の 2 つの Visual Studio WCF プロジェクトでは、web.config の内容をさまざまな方法でシャッフルしました。

  • Visual Studio ソリューション ファイルが存在する物理ディレクトリを指す 1 つの IIS アプリケーション。2 つの WCF プロジェクトは、それぞれ 2 つのサブフォルダーにあります。
  • 2 つの WCF プロジェクトの物理ディレクトリをそれぞれ指す 2 つの仮想ディレクトリを含む、任意の物理的な場所を指す 1 つの IIS アプリケーション。ここには 3 つの Web 構成ファイルがあります。1 つは IIS アプリ ルート用、残りの 2 つは仮想ディレクトリ用です。

上記の 2 番目のオプションのバリエーションはほぼ機能しました。私が得た最終的なエラーメッセージは次のとおりです。

ServiceHost ディレクティブで Service 属性値として提供されるか、構成要素 system.serviceModel/serviceHostingEnvironment/serviceActivations で提供されるタイプ 'Sample.ServiceGroupAlpha.ServiceAlpha' が見つかりませんでした。
説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.InvalidOperationException: ServiceHost ディレクティブの Service 属性値として提供されるか、構成要素 system.serviceModel/serviceHostingEnvironment/serviceActivations で提供される型 'Sample.ServiceGroupAlpha.ServiceAlpha' が見つかりませんでした。

これにより、 ServiceHost ディレクティブを確認し、(恥ずかしながら) 変更するようになりました。

<%@ ServiceHost Language="C#" Debug="true" Service="Sample.ServiceGroupAlpha.ServiceAlpha" CodeBehind="AlphaServices/ServiceAlpha.svc.cs" %>

...CodeBehind属性には、私が追加した相対パス (仮想ディレクトリの名前) があることに注意してください。まあ、これはうまくいきませんでしたが、私はこの仕事をするのに近づいていると思わずにはいられません。誰かが修正を持っているかどうか、またはこのすべてを達成するための「正しい」方法を中継できるかどうかを知りたいです。

最終的には、同じ IIS アプリケーション内に 2 つの別個の Web/WCF プロジェクトがあるなどということはないというのが答えかもしれません。もしそうだったら驚きです。もう 1 つの答えは、「2 つの WCF プロジェクトを 1 つの Visual Studio プロジェクト/バイナリに結合する」かもしれません。私もその答えを望んでいないと仮定してください。

4

1 に答える 1

1

WCF に焦点を当てると、現時点で最も近い答えは、複数の VS "WCF Service Library" プロジェクトをすべて単一の VS "WCF Service Application" に参加させることだと思います。

質問で概説したアプローチが「そのまま」機能する場合、前述のリンクに再び答えがあるのではないかと思います。これの代わりに...

<%@ ServiceHost Language="C#" Debug="true" Service="WcfWebService.Service1" 
    CodeBehind="Service1.svc.cs" %> 

私はこのようなものを使用します...

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Service1" %>
<%@ Assembly Name="WcfServiceLibrary" %>

これを試す時間も必要もありませんが、上記の調整により、質問で提起した最後の問題を処理できるようです。

于 2012-10-25T18:42:57.230 に答える