当我在Visual Studio 2012中右键单击Eval.svc
并在浏览器中查看时,我得到以下内容 -
类型'EvalServiceLibary.Eval',作为ServiceHost指令中的Service属性值提供,或者在配置元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供。
当我从测试客户端运行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>
为什么我收到此错误的任何想法?我搜索过谷歌,看到几页,但似乎没什么用。
谢谢!
答案 0 :(得分:63)
更改Eval.svc
文件中的以下行:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
到:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
答案 1 :(得分:32)
确保二进制文件位于“.svc”文件的“bin”子目录下
答案 2 :(得分:9)
事实证明,Eval.svc.cs需要将其名称空间更改为EvalServiceLibary,而不是EvalServiceSite。
答案 3 :(得分:4)
我自己就是这个问题,网上的这个或其他任何答案都没有解决我的问题。对我来说,这是一个奇怪的目标,其中虚拟目录已在另一个源控制服务器的不同分支上创建(基本上,我们从TFS 2010升级到2013),解决方案以某种方式记住了它的映射。
无论如何,我再次在服务项目的属性中单击“创建虚拟目录”按钮。它给了我一个关于映射到不同文件夹的消息,我想更新它。我点击了是,这解决了这个问题。
答案 4 :(得分:3)
创建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
),服务名称和接口与服务标签的名称属性和网络中的端点合同相同的.config。
答案 5 :(得分:2)
我更改了服务的输出路径。它应该在服务项目的bin
文件夹中。一旦我将输出路径放回bin
,就可以了。
答案 6 :(得分:1)
右键单击解决方案资源管理器中的.svc文件,然后单击View Markup
<%@ ServiceHost Language="C#" Debug="true"
Service="MyService.**GetHistoryInfo**"
CodeBehind="GetHistoryInfo.svc.cs" %>
更新您所指的服务参考。
答案 7 :(得分:1)
我有同样的问题。确保在Factory
文件的.svc
属性中包含程序集名称。如果您已重命名项目程序集名称,则可能需要清理IIS缓存。
答案 8 :(得分:0)
仔细检查项目.net版本。使用不同.net版本互相引用的项目会导致问题。
答案 9 :(得分:0)
在我的情况下,我在iis上的“错误的文件夹”中执行了“转换为应用程序”。 我的应用程序设置在应该存在的子文件夹中。
答案 10 :(得分:0)
当我将Visual Studio中的当前构建配置设置为Debug之外的其他内容时,我遇到了这个错误。
答案 11 :(得分:0)
我也有同样的问题。故意我的构建输出路径是“.. \ bin”,当我将构建输出路径设置为“\ bin”时,它适用于我。
答案 12 :(得分:-1)
这是一个老版本的错误,但我今天在一个网站服务上遇到它,自从通过&#34; New \ Project ...&#34;
创建以来几乎没有改变过。对我来说,这个问题是由&#34; IService.cs
&#34;包含以下内容的文件:
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1.svc" CodeBehind="Service1.svc.cs" %>
请注意Service
属性中的值包含&#34; .svc
&#34;最后。
这不应该存在。
删除这4个字符解决了这个问题。
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1" CodeBehind="Service1.svc.cs" %>
请注意,您需要从Visual Studio外部打开此文件。
Visual Studio在解决方案资源管理器中显示一个文件Service1.cs
,但只允许您更改Service1.svc.cs
,而不是 Service1.svc
文件。