web-dev-qa-db-ja.com

WCFサービス、サービス属性値として提供されるタイプ…が見つかりませんでした

Visual Studio 2012内でEval.svcを右クリックしてブラウザーで表示すると、次のように表示されます-

ServiceHostディレクティブのService属性値として提供された、または構成要素system.serviceModel/serviceHostingEnvironment/serviceActivationsで提供されたタイプ 'EvalServiceLibary.Eval'が見つかりませんでした。

テストクライアントからWCFサービスを実行すると、すべて正常に動作します。

評価サービス:

[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]
public class EvalService : IEvalService
{
    Dictionary<string, JobPhaseTimer> jobTimers = new Dictionary<string, JobPhaseTimer>();

    public void SubmitEntry(ENBO.Jobs.Job job, ENBO.Jobs.JobDetail jobDetail, ENBO.TimeLogs.TimeLog timeLog, ENBO.Users.User user, ENBO.Utilities.EntryType entryType, JobPhase jobPhase)
    {
        if (entryType == EntryType.Active)
        {
            JobPhaseTimer timer = new JobPhaseTimer();
            timer.UID = job.ID + "_" + jobPhase.ID;
            timer.JobID = job.ID;
            timer.JobDetailID = jobDetail.ID;
            timer.PhaseID = jobPhase.ID;
            timer.StartTime = DateTime.Now;
            timer.Stopwatch.Start();
            jobTimers.Add(timer.UID, timer);

            TimeLog log = new TimeLog();
            log.JobID = job.ID;
            log.PhaseID = jobPhase.ID;
            log.UserID = user.ID;
            log.DateEntry = DateTime.Now;
            log.EntryType = EntryType.Active;

            if (log.AddNewTimeLog())
            {
                //Do something
            }
        }
        else if (entryType == EntryType.Paused)
        {
            JobPhaseTimer timer = jobTimers[job.ID + "_" + jobPhase.ID];
            timer.Stopwatch.Stop();

            TimeLog log = new TimeLog();
            log.JobID = job.ID;
            log.PhaseID = jobPhase.ID;
            log.UserID = user.ID;
            log.DateEntry = DateTime.Now;
            log.EntryType = EntryType.Paused;

            if (log.AddNewTimeLog())
            {
                //Do something
            }
        }
    }
}

IEvalService.cs(サービス契約)

[ServiceContract]
public interface IEvalService
{
    [OperationContract]
    void SubmitEntry(Job job, JobDetail jobDetail, TimeLog timeLog, User user, EntryType entryType, JobPhase jobPhase);
}

Eval.svcマークアップ:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>

Web.config

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
  </appSettings>
  <system.web>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5"/>
  </system.web>
  <system.serviceModel>
    <services>
      <service name="EvalServiceLibary.EvalService">
        <endpoint address="" behaviorConfiguration="" binding="webHttpBinding"
      contract="EvalServiceLibary.IEvalService" />
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration=""
      contract="EvalServiceLibary.IEvalService" />
      </service>
    </services>
    <behaviors>
      <endpointBehaviors>
        <behavior name="EvalServiceSite.EvalAspNetAjaxBehavior">
          <enableWebScript />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="false" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <protocolMapping>
        <add binding="basicHttpsBinding" scheme="https" />
    </protocolMapping>    
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true"
      multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
    <directoryBrowse enabled="true"/>
  </system.webServer>
</configuration>

このエラーが発生する理由はありますか? Googleで検索したところ、いくつかのページが見つかりましたが、何も機能していないようです。

ありがとう!

27
dynamicuser

Eval.svc.csでは、EvalServiceSiteではなくEvalServiceLibaryに名前空間を変更する必要がありました。

9
dynamicuser

Eval.svcファイルの次の行を次から変更します。

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %> 

に:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
65
user3578181

バイナリファイルが「.svc」ファイルの「bin」サブディレクトリの下にあることを確認します

33
vasek

この正確な問題に直面しました。 xxxx.svc.csファイルに使用したネームスペースと一致するように、マークアップのService = "Namespace.ServiceName"タグを変更して(xxxx.svcを右クリックし、Visual Studioで[マークアップの表示]を選択して)問題を解決しました。

17
TheCopyPaster
  1. IISアプリケーションのみを作成すると、/bin または /App_Codeフォルダは、IISアプリのルートディレクトリにあります。したがって、すべてのコードをルート/bin または /App_codeディレクトリ( http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis.aspx を参照)。

  2. サービス名と契約にフルネームが含まれていることを確認してください(例:namespace.ClassName)、およびサービス名とインターフェイスは、web.configのエンドポイントのサービスタグとコントラクトの名前属性と同じです。

私は自分でこの問題にぶつかりましたが、これもネット上の他の答えも私の問題を解決しませんでした。私にとっては、仮想ディレクトリが別のソース管理サーバーの別のブランチに作成され(基本的に、TFS 2010から2013にアップグレードされた)、ソリューションが何らかの形でマッピングを記憶しているという奇妙なものでした。

とにかく、サービスプロジェクトのプロパティで[仮想ディレクトリの作成]ボタンをもう一度クリックしました。別のフォルダーにマップされているというメッセージが表示されたので、更新しますか。 [はい]をクリックすると、問題が修正されました。

4
Detail

サービスの出力パスを変更しました。サービスプロジェクトのbinフォルダー内にある必要があります。出力パスをbinに戻すと、機能しました。

2
Gokul

ソリューションエクスプローラーで.svcファイルを右クリックして、[View Markup

 <%@ ServiceHost Language="C#" Debug="true" 
     Service="MyService.**GetHistoryInfo**" 
     CodeBehind="GetHistoryInfo.svc.cs" %>

参照しているサービス参照を更新します。

1
Joe

同じ問題がありました。 .svcファイルのFactoryプロパティにアセンブリ名を含めるようにしてください。プロジェクトのアセンブリ名を変更した場合は、IISキャッシュを消去する必要があるかもしれません。

1
Jalal

私も同じ問題を抱えていました。意図的にビルド出力パスは「..\bin」でしたが、ビルド出力パスを「\ bin」として設定すると機能します。

0
K.Kirivarnan

プロジェクトの.netバージョンを再確認してください。異なる.netバージョンで相互に参照したプロジェクトは問題を引き起こします。

0
Mehmet

私の場合、私はiisの間違ったフォルダに「アプリケーションに変換」しました。私のアプリケーションは、本来あるべき場所のサブフォルダーに設定されました。

0
Navy Seal

Visual Studioの現在のビルド構成をデバッグ以外に設定したときに、このエラーが発生しました。

0
BineG