web-dev-qa-db-ja.com

WCF、ServiceHostディレクティブのサービス属性値が見つかりませんでした

IIS 6でサービスをホストしようとしていますが、この例外が発生し続けます。

    Server Error in '/WebServices' Application.
--------------------------------------------------------------------------------

The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive 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 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive 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 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.]
   System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +6714599
   System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +604
   System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +46
   System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +654

[ServiceActivationException: The service '/WebServices/dm/RecipientService.svc' cannot be activated due to an exception during compilation.  The exception message is: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found..]
   System.ServiceModel.AsyncResult.End(IAsyncResult result) +15626880
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15546921
   System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171




--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082 

アセンブリが見つからないように見えることを除いて、まったく手がかりがありません。コードは、パブリッククラスで正しくコンパイルする必要があります。

ここに私の.svcファイルがあります:

<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>

Nothinを含む非常にシンプルなサービスを作成しようとしましたが、これが機能するかどうかも確認しますが、それでも同じ古いエラーが表示されます。

The type 'IISHost.Service1', provided as the Service attribute value in the ServiceHost directive could not be found. 
71
nandarya

オプション1

このメッセージは、多くの場合、IIS 7構成の問題が原因です。サービスが存在するフォルダーを指す仮想ディレクトリの作成に慣れている場合、それは機能しなくなります。ここで、代わりに「アプリケーションの作成...」オプションを使用する必要があります。

その他のオプション

65

問題は、svc.csファイルにあるように、svcファイルの別のネームスペースにある可能性もあります。

Svcファイルでは、名前空間は次の形式である必要があります。

Service="Namespace.SvcClassName"
70
Peter Stegnar

これはおそらく「明白な」答えであることは知っていますが、少しつまずきました。プロジェクトのdllがbinフォルダーにあることを確認してください。サービスが公開されたとき、それを公開した人は、それらがGACにあると考えたため、dllを削除しました。プロジェクト専用のもの(この場合はQS.DialogManager.Communication.IISHost.RecipientService.dll)はありませんでした。

非常に異なる理由で同じエラー。

30
baileyrt

このエラーは、.SVCファイルのサービス名の不一致が原因で発生します。おそらく、インターフェイスを実装しているサービスクラスの名前を変更した可能性があります。解決策は、.SVCファイルを開き、Service属性とCodeBehind属性を完全に一致させることです。 .SVCファイルは次のようになります

<%@ ServiceHost Language="Language you are using" Debug="bool value to enable debugging" Service="Service class name that is implementing your Service interface" Codebehind="~/Appcode/Class implementing interface.cs"%>. for eg.

<%@ ServiceHost Language="C#" Debug="true" Service="Product.Service" CodeBehind=~/AppCode/Product.Service.cs"%>

この例は、C#言語を使用し、デバッグを有効にしたServiceクラスを実装する.svcファイルであり、このクラスはService.csという名前のアプリフォルダー内にあり、ProductはServiceクラスの名前空間です。

また、サービス構成ファイルでそれぞれの変更を行ってください。

 <system.serviceModel>
    <services>
    <service name="Product.Service" behaviorConfiguration="ServiceBehavior">
    <endpoint address="" binding="wsHttpBinding" contract="Product.Iservice">
    </endpoint>
    <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
    </service>
    </services>
    <behaviors>
    <behavior name="ServiceBehavior">
    <serviceMetaData httpGetEnabled="true"/>
    <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
    </behaviors>
    </system.serviceModel>
11
Chandra Malla

.svcファイルのServiceHostディレクティブから正しいタイプを参照していることを再確認してください。方法は次のとおりです...

  1. Webサービスを含むVSプロジェクトで、XMLエディターで.svcファイルを開きます(ファイルを右クリックして開く...、XML(テキスト)エディター、OKを選択します)。
  2. 「サービス」属性値に注意してください。
  3. サービスの完全修飾タイプ名と一致することを確認してください。これには、名前空間+型名が含まれます。たとえば、名前空間が「MyCompany.Department.Services」でクラスの名前が「MyService」の場合、Service属性の値は「MyCompany.Department.Services.MyService」である必要があります。
9
charlie249

同じ例外が発生しました。これは、タイプが.svcファイルに正しく記載されていないためです。

以下の修正で修正しました。

あなたの.svc.csにこのようなクラスがある場合

namespace Azh.Services.MyApp
{
    public class WcfApp : FI.IWcfAppService
{
...
}
}

このため、.svcファイルは次のようになります。

<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>
7
zahirhas

ローカルbinにサービスを提供するようにbinフォルダーパスを構成する必要があります。

4
Kishor

私は実際に同じ問題を解決しました。ここに私の提案があります-エラーは、Service属性で参照されているオブジェクトが見つからないことを意味します。オブジェクトを見つけるには、アプリケーションまたはライブラリがbinフォルダーに出力を構築する必要があります。

アプリケーションのプロパティページを編集し、「bin」への出力パスを指定できます。

2
Dayakumar

名前を変更した場合は、(Properties /)AssemblyInfo.csとサービスファイルのヘッダーが正しいことを確認してください。

ServiceName.svc

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>

Service.svc.csの名前空間との整合

2
lko

Svcファイルが存在するbinフォルダーにサービスDLLがありました。 DLLをルートbinフォルダーに移動すると、問題が解決しました。

1

これは些細に聞こえるかもしれませんが、言及する価値があります:(Visual Studioで)サービスをbuildする必要があります-DLLが作成されますbinサブフォルダー。

サービスがサーバーに「デプロイ」されると、そのbinフォルダーにはそのDLLファイルが必要になります-そうでない場合、このエラーがスローされます...

1
Yuval A.

この問題が発生しました-私のサービスタイプはGACにありました。タイプを含むdllをbinフォルダーに追加するとうまくいきますが、GACにあるように、これは私が望んでいたものではありませんでした。最終的にこれをサービスのweb.configに追加しました

<system.web>
    <customErrors mode="RemoteOnly" />
    <compilation debug="true" targetFramework="4.0">
        <assemblies>
            <add Assembly="[name in GAC], Version=[version in GAC], Culture=neutral, PublicKeyToken=[ac token]" />
        </assemblies>
    </compilation>
</system.web>

binフォルダーにDLLを必要とせずに機能しました。

1
Jason9364

今日、このエラーに直面しました。理由は次のとおりです。 IISユーザーには、アプリケーションフォルダーにアクセスする権限がありません。アプリのルートフォルダーに読み取りアクセス許可を与えました。

1
Fatih Çelik

また、Microsoft.ServiceModel.Samples.Calculator WCFサンプルを試してこの問題に遭遇しました。 IIS 5.1を使用しています。自動生成されたWebサイト(servicemodelsamples)がアプリケーションではないことを確認することで解決しました。フォルダを右クリックし、「プロパティ」をクリックして、「作成」ボタンをクリックします。

1
amgray789

私の場合、仮想ディレクトリを右クリックし、「アプリケーションに変換」を選択してください。

1
Atul K.

「ServiceHostディレクティブのサービス属性値が見つかりませんでした」という特定のフレーバーの場合、これに対する2つのキー:問題(1)Silverlightで作業している場合は、Silverlight WCF対応サービスを使用する必要があります。 Silverlight WCFサービス。これにより、バインディングのWeb.Configが更新され、タイプが表示されます。 (2)新しいサービスのクラス名をサービス名に一致させます。ここでの目標はwsdlを作成することです。これにより、SilverlightクライアントとWebにサービスの機能が公開されていることがわかります。サービスをクラスに一致させると役立ちます。名前が大きくなったら、Web.Configを3か所(serviceBehaviors、services、bindings)で編集する必要があります。

この問題を抱える人々を支援するための非常に多くの誠実な試みがありましたが、この記事はSilverlightソリューション用であり、クライアント/ Web構成でSilverlight 3を使用していない人には当てはまらない可能性があることを強調する必要があります。

それが役に立てば幸い。

1
kgoldfisher

私は同じ問題を抱えていましたが、何が原因かはわかりませんでした。デバッグからリリースに変更して、新しいインスタンスのデバッグ/開始を使用して実行することで解決しました。その後、リリースとデバッグの両方で実行されました。それは魔法だった...

1
Clayton
  1. マークアップ(svc)ファイルにnamespace.classnameのサービス属性があり、コードビハインドがclassname.svc.csになることを確認してください

  2. ソリューションを再構築する

  3. ローカルIISからアプリプールを1回再起動します。

0
Nitin

同じソリューションで最初のSilverlight対応WCFのサービス参照を追加しようとすると、このエラーが発生しました。 .Webプロジェクトをビルドするだけで、動作し始めました。

0
AnoojNair

サービス参照を追加する前にソリューションを構築すると、問題が解決しました。

0
Ratan

私は同じ問題を抱えていて、このスレッドを見つけて、nogo以外はすべて試しました。

その後、さらに4時間を無駄に費やします。

次に、コンパイル設定が64ビットからx86に変更されたことを発見しました。私がそれを64ビットに戻したとき、それは働きました。正確な理由はわかりませんが、IISアプリケーションプールが32ビットアプリケーションを許可するように設定されていない可能性があります。

0
edelwater

サービスにサービスの参照を追加するか、dllをコピーします。

0
JDP