WCF服务,无法找到作为服务属性值...提供的类型

dyn*_*ser 27 c# wcf wcf-binding

当我Eval.svc在Visual Studio 2012中右键单击并在浏览器中查看时,我得到以下内容 -

无法找到类型'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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

IEvalService.cs (服务合约)

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

Eval.svc 加价:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

任何想法为什么我收到此错误?我搜索过谷歌,看到几页,但似乎没什么用.

谢谢!

use*_*181 66

更改Eval.svc文件中的以下行:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %> 
Run Code Online (Sandbox Code Playgroud)

至:

<%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
Run Code Online (Sandbox Code Playgroud)

  • 成功了!只是要添加,如果找不到指定的标记 - 右键单击​​解决方案资源管理器中的.svc文件,然后单击"查看标记".否则,如果您打开它,它将打开代码文件. (7认同)
  • 当我已经创建.svc之后,在我的项目下更改`namespace`时,这发生了。除标记外,其他所有地方均已更新。 (2认同)

vas*_*sek 34

确保二进制文件位于".svc"文件的"bin"子目录下

  • 我的输出路径设置为“ bin \ Debug \”。我将其更改为“ bin”并克服了错误。 (2认同)

小智 17

面对这个确切的问题.当我在标记中更改Service ="Namespace.ServiceName"标记(右键单击xxxx.svc并在visual studio中选择View Markup)以匹配我用于xxxx.svc.cs文件的命名空间时,问题得以解决


dyn*_*ser 10

事实证明,Eval.svc.cs需要将其名称空间更改为EvalServiceLibary,而不是EvalServiceSite.


小智 6

  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中的服务标签和端点合同的名称属性相同。


Det*_*ail 5

我自己就遇到了这个问题,这个问题和网上的任何其他答案都没有解决我的问题。对我来说,这是一个奇怪的问题,虚拟目录是在另一个源代码控制服务器的不同分支上创建的(基本上,我们从 TFS 2010 升级到 2013),并且解决方案以某种方式记住了它的映射。

不管怎样,我在服务项目的属性中再次单击了“创建虚拟目录”按钮。它给了我一条关于被映射到不同文件夹的消息,我想更新它。我点击“是”,问题就解决了。