system.serviceModel/ serviceHostingEnvironment/ serviceActivations が見つかりませんでした

こちらは WCF の設定時に発生する可能性のあるエラーメッセージです。

Server Error in '/' Application.

The type 'MyMath.Calc', provided as the Service attribute value in the ServiceHost 
directive, or provided in the configuration element 
system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

Description: An unhandled exception occurred during the execution of the current 
web request. Please review the stack trace for more information about the error 
and where it originated in the code.

Exception Details: System.InvalidOperationException: The type 'MyMath.Calc', 
provided as the Service attribute value in the ServiceHost directive, or provided 
in the configuration element 
system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

Source Error:

An unhandled exception was generated during the execution of the current web request. 
Information regarding the origin and location of the exception can be identified 
using the exception stack trace below.

Stack Trace:

[InvalidOperationException: The type 'MyMath.Calc', provided as the Service 
attribute value in the ServiceHost directive, or provided in the configuration 
element system.serviceModel/serviceHostingEnvironment/serviceActivations could 
not be found.]
   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(
   String constructorString, Uri[] baseAddresses) +51902
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +1440
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +44
   System.ServiceModel.HostingManager.EnsureServiceAvailable(
String normalizedVirtualPath) +615

[ServiceActivationException: The service '/CalcService/CalcService.svc' cannot 
be activated due to an exception during compilation.  The exception message is: 
The type 'MyMath.Calc', provided as the Service attribute value in the ServiceHost 
directive, or provided in the configuration element 
system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found..]
   System.Runtime.AsyncResult.End(IAsyncResult result) +679246
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +190
   System.ServiceModel.Activation.ServiceHttpModule.EndProcessRequest(
IAsyncResult ar) +300622
   System.Web.AsyncEventExecutionStep.OnAsyncEventCompletion(IAsyncResult ar) +8837348


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.1 

このエラーは、サービスホストとなるクラスが見つからない場合に発生します。 上記の場合、CalcService.svc というサービスの ServiceHost ディレクティブで指定している MyMath.Calc というクラスがみつからないために上記のエラーが発生しています。

アセンブリを正しく登録するには、アセンブリを bin ディレクトリに置く、あるいはコードファイルを App_Code に配置するなどすれば OK のはずです。 (もちろん、コードが正しく書かれていれば)

アセンブリやコードを正しく配置したつもりなのに・・・と思ったときの良くある間違い

しばしば見かける間違いは、アプリケーションルートの認識間違いです。

bin ディレクトリや App_Code ディレクトリは、ASP.NET アプリケーションのルート直下に作成します。 ASP.NET アプリケーションは IIS マネージャで地球儀っぽいアイコンで示されます。一方、(ただの)仮想ディレクトリはフォルダアイコンで示されます。

ASP.NET アプリケーションアイコン

IIS 仮想ディレクトリ
ASP.NET
アプリケーション
IIS 仮想
ディレクトリ
アイコンの違い

bin ディレクトリや App_Code ディレクトリは、このアプリケーションルートの直下に作ります。 アプリケーションのルートの直下に bin や App_Code をつくり、その中にアセンブリなりコードなりを置けば実行時に .NET Framework から参照されます。

ASP.NET アプリケーションアイコン

しかし、アプリケーションになっていないと、bin ディレクトリや App_Code ディレクトリは参照されないので、 そこにアセンブリやコードをおいても参照されずに、上記のエラーが発生してしまいます。

ASP.NET アプリケーションアイコン

この解決はいたって簡単で、仮想ディレクトリを右クリックして 「アプリケーションに変換」 を選択して、 アプリケーションにすれば OK です。

ASP.NET アプリケーションアイコン

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 ASP.NET 入門