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

时间:2013-07-11 11:18:02

标签: c# wcf wcf-binding

当我在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>

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

谢谢!

13 个答案:

答案 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)

  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),服务名称和接口与服务标签的名称属性和网络中的端点合同相同的.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文件。

相关问题