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 仮想 ディレクトリ | |
アイコンの違い |
---|
bin ディレクトリや App_Code ディレクトリは、このアプリケーションルートの直下に作ります。 アプリケーションのルートの直下に bin や App_Code をつくり、その中にアセンブリなりコードなりを置けば実行時に .NET Framework から参照されます。
しかし、アプリケーションになっていないと、bin ディレクトリや App_Code ディレクトリは参照されないので、 そこにアセンブリやコードをおいても参照されずに、上記のエラーが発生してしまいます。
この解決はいたって簡単で、仮想ディレクトリを右クリックして 「アプリケーションに変換」 を選択して、 アプリケーションにすれば OK です。