WCF服务,无法找到作为服务属性值…提供的类型
当我在Visual Studio 2012中右键单击Eval.svc
并在浏览器中查看时,我得到以下内容 –
无法找到类型’EvalServiceLibary.Eval’,作为ServiceHost指令中的Service属性值提供,或者在配置元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供。
当我从测试客户端运行WCF服务时,一切正常。
评估服务:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] public class EvalService : IEvalService { Dictionary jobTimers = new Dictionary(); 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
标记:
Web.config
:
任何想法为什么我收到此错误? 我搜索过谷歌,看到几页,但似乎没什么用。
谢谢!
从以下位置更改Eval.svc
文件中的以下行:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
至:
<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
确保二进制文件位于“.svc”文件的“bin”子目录下
面对这个确切的问题。 当我更改Markup中的Service =“Namespace.ServiceName”标记(右键单击xxxx.svc并在visual studio中选择View Markup)以匹配我用于xxxx.svc.cs文件的命名空间时,问题得以解决
事实certificate,Eval.svc.cs需要将其名称空间更改为EvalServiceLibary,而不是EvalServiceSite。
我自己就是这个问题,网上的这个或其他任何答案都没有解决我的问题。 对我来说,这是一个奇怪的虚拟目录,其中虚拟目录已在另一个源控制服务器的不同分支上创建(基本上,我们从TFS 2010升级到2013),解决方案以某种方式记住了它的映射。
无论如何,我再次在服务项目的属性中单击“创建虚拟目录”按钮。 它给了我一个关于被映射到不同文件夹的消息,我想更新它。 我点击了是,这解决了问题。
-
创建IIS应用程序时,只有
/bin
或/App_Code
文件夹位于IIS应用程序的根目录中。 所以请记住将所有代码放在root/bin
或/App_code
目录中(参见http://blogs.msdn.com/b/chrsmith/archive/2006/08/10/wcf-service-nesting-in-iis。 aspx )。 -
确保服务名称和合同包含全名(例如
namespace.ClassName
),服务名称和接口与web.config中服务标签和端点合同的name属性相同。
我改变了服务的输出路径。 它应该在服务项目的bin
文件夹中。 一旦我将输出路径放回bin
,就可以了。
右键单击解决方案资源管理器中的.svc文件,然后单击“ View Markup
<%@ ServiceHost Language="C#" Debug="true" Service="MyService.**GetHistoryInfo**" CodeBehind="GetHistoryInfo.svc.cs" %>
更新您所指的服务引用。
仔细检查项目.net版本。 使用不同.net版本互相引用的项目会导致问题。
在我的情况下,我做了一个“转换为应用程序”到iis上的错误文件夹。 我的应用程序设置在应该存在的子文件夹中。
当我将Visual Studio中的当前构建配置设置为除Debug之外的其他东西时,我遇到了这个错误。
我也有同样的问题。 故意我的构建输出路径是“.. \ bin”,当我将构建输出路径设置为“\ bin”时,它适用于我。
这是一个老错误,但我今天在一个Web服务上遇到它,自从通过“New \ Project ..”创建以来几乎没有改变过。
对我来说,这个问题是由包含以下内容的“ IService.cs
”文件引起的:
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1.svc" CodeBehind="Service1.svc.cs" %>
请注意, Service
属性中的值最后包含“ .svc
”。
这应该不存在。
删除这4个字符解决了这个问题。
<%@ ServiceHost Language="C#" Debug="true" Service="JSONWebService.Service1" CodeBehind="Service1.svc.cs" %>
请注意,您需要从Visual Studio外部打开此文件。
Visual Studio在解决方案资源管理器中显示一个文件Service1.cs
,但只允许您更改Service1.svc.cs
, 而不是 Service1.svc
文件。