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で検索したところ、いくつかのページが見つかりましたが、何も機能していないようです。
ありがとう!
Eval.svc.csでは、EvalServiceSiteではなくEvalServiceLibaryに名前空間を変更する必要がありました。
Eval.svc
ファイルの次の行を次から変更します。
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
に:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
バイナリファイルが「.svc」ファイルの「bin」サブディレクトリの下にあることを確認します
この正確な問題に直面しました。 xxxx.svc.csファイルに使用したネームスペースと一致するように、マークアップのService = "Namespace.ServiceName"タグを変更して(xxxx.svcを右クリックし、Visual Studioで[マークアップの表示]を選択して)問題を解決しました。
IISアプリケーションのみを作成すると、/bin
または /App_Code
フォルダは、IISアプリのルートディレクトリにあります。したがって、すべてのコードをルート/bin
または /App_code
ディレクトリ( http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis.aspx を参照)。
サービス名と契約にフルネームが含まれていることを確認してください(例:namespace.ClassName
)、およびサービス名とインターフェイスは、web.configのエンドポイントのサービスタグとコントラクトの名前属性と同じです。
私は自分でこの問題にぶつかりましたが、これもネット上の他の答えも私の問題を解決しませんでした。私にとっては、仮想ディレクトリが別のソース管理サーバーの別のブランチに作成され(基本的に、TFS 2010から2013にアップグレードされた)、ソリューションが何らかの形でマッピングを記憶しているという奇妙なものでした。
とにかく、サービスプロジェクトのプロパティで[仮想ディレクトリの作成]ボタンをもう一度クリックしました。別のフォルダーにマップされているというメッセージが表示されたので、更新しますか。 [はい]をクリックすると、問題が修正されました。
サービスの出力パスを変更しました。サービスプロジェクトのbin
フォルダー内にある必要があります。出力パスをbin
に戻すと、機能しました。
ソリューションエクスプローラーで.svcファイルを右クリックして、[View Markup
<%@ ServiceHost Language="C#" Debug="true"
Service="MyService.**GetHistoryInfo**"
CodeBehind="GetHistoryInfo.svc.cs" %>
参照しているサービス参照を更新します。
同じ問題がありました。 .svc
ファイルのFactory
プロパティにアセンブリ名を含めるようにしてください。プロジェクトのアセンブリ名を変更した場合は、IISキャッシュを消去する必要があるかもしれません。
私も同じ問題を抱えていました。意図的にビルド出力パスは「..\bin」でしたが、ビルド出力パスを「\ bin」として設定すると機能します。
プロジェクトの.netバージョンを再確認してください。異なる.netバージョンで相互に参照したプロジェクトは問題を引き起こします。
私の場合、私はiisの間違ったフォルダに「アプリケーションに変換」しました。私のアプリケーションは、本来あるべき場所のサブフォルダーに設定されました。
Visual Studioの現在のビルド構成をデバッグ以外に設定したときに、このエラーが発生しました。