【问题标题】:WCF Service, the type provided as the service attribute values…could not be foundWCF 服务,作为服务属性值提供的类型……找不到
【发布时间】:2013-07-09 15:24:25
【问题描述】:

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

找不到类型“EvalServiceLibary.Eval”,作为 ServiceHost 指令中的服务属性值提供,或在配置元素 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>

任何想法为什么我会收到此错误?我在 Google 上搜索过几页,但似乎没有任何效果。

谢谢!

【问题讨论】:

  • 它是一个网络项目吗? web.config 是什么样的?
  • 是的,一个网络项目。我已将 web.config 添加到问题中。干杯

标签: c# wcf wcf-binding


【解决方案1】:

原来 Eval.svc.cs 需要将其命名空间更改为 EvalServiceLibary,而不是 EvalServiceSite。

【讨论】:

    【解决方案2】:

    Eval.svc 文件中的以下行从:

    <%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.Eval" %> 
    

    到:

    <%@ ServiceHost Language="C#" Debug="true" Service="EvalServiceLibary.EvalService" %>
    

    【讨论】:

    • 这应该在我的“奇怪的 WCF 服务错误列表”之类的。
    • 成功了!只需添加,如果您找不到指定的标记 - 右键单击​​解决方案资源管理器中的 .svc 文件,然后单击“查看标记”。否则,如果你打开它,它会打开代码文件。
    • 天啊!在将教程中的服务名称从 service1 更改为其他名称后,我到处寻找这个。右键单击 .svc 文件为我节省了数小时的头发拉扯时间!!!
    • 我很高兴它对你们有用。干杯 - 阿里拉希米
    • 我在创建 .svc 后更改了项目下的 namespace 时发生了这种情况。它在除标记之外的所有地方都更新了。
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 太棒了。就是这样!我忘了我清理了我的解决方案。只需要建造。这么模糊的错误
      • 我的输出路径设置为“bin\Debug\”。我将其更改为“bin”并克服了错误。
      【解决方案5】:

      仔细检查项目的 .net 版本。使用不同 .net 版本相互引用的项目会导致问题。

      【讨论】:

        【解决方案6】:

        在我的情况下,我对 iis 上的错误文件夹进行了“转换为应用程序”。 我的应用程序被设置在它应该在的子文件夹中。

        【讨论】:

          【解决方案7】:

          我更改了服务的输出路径。它应该在服务项目的bin 文件夹中。一旦我将输出路径放回bin,它就起作用了。

          【讨论】:

            【解决方案8】:

            当我将 Visual Studio 中的当前构建配置设置为除调试以外的其他设置时,我遇到了此错误。

            【讨论】:

              【解决方案9】:

              这是一个老错误,但我今天在一个网络服务上遇到了它,自从通过“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 文件。

              【讨论】:

              • VS 允许您通过右键单击和“查看标记”来编辑此文件。
              【解决方案10】:

              我也有同样的问题。故意我的构建输出路径是“..\bin”,当我将构建输出路径设置为“\bin”时它对我有用。

              【讨论】:

                【解决方案11】:

                面临这个确切的问题。当我更改标记中的 Service="Namespace.ServiceName" 标记(右键单击 xxxx.svc 并在 Visual Studio 中选择查看标记)以匹配我用于 xxxx.svc.cs 文件的命名空间时,问题解决了

                【讨论】:

                • 这是我的确切问题。命名空间限定符区分大小写。
                • 太棒了。我手动更改了合同名称和 c# 文件名,所以这也是我必须手动执行的操作。谢谢。
                【解决方案12】:
                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. 1234563 .

                【讨论】:

                • 第二点帮助了我,服务名称包含命名空间名称但不包含类名称,因此由 Namespace.ClassName 完成服务名称
                • 我在测试客户端上调试时收到此错误,不知何故必须将 \bin\debug 删除为 \bin 才能正常工作。为什么会这样?
                【解决方案13】:

                在解决方案资源管理器中右键单击 .svc 文件,然后单击 View Markup

                 <%@ ServiceHost Language="C#" Debug="true" 
                     Service="MyService.**GetHistoryInfo**" 
                     CodeBehind="GetHistoryInfo.svc.cs" %>
                

                更新您所指的服务参考。

                【讨论】:

                • 这是为我做的。最初的原因是对默认服务名称“Service1”的“重命名”操作失败。
                【解决方案14】:

                我遇到了同样的问题。确保在 .svc 文件的 Factory 属性中包含程序集名称。如果您重命名了项目程序集名称,可能需要清理 IIS 缓存。

                【讨论】:

                  【解决方案15】:

                  我们刚刚遇到了这个问题,而且还没有给出任何答案。它还具有一些显着的识别特征,这些特征与问题中指定的不同,因此此答案与以下情况有关:

                  1. 它发生在负载平衡的网络场上。
                  2. 服务器已复制。
                  3. 该服务在场中的“主”服务器上运行良好(通过使用该服务器上的浏览器访问服务的 URL 来证明),但在场中的其他服务器上却无法正常工作(以相同的方式展示)。李>

                  失败的服务器上的 EventViewer 应用程序日志出现此错误(与问题相符,我只是给出完整的异常消息):

                  System.ServiceModel.ServiceActivationException:服务 '/redactedService.svc' 无法激活,因为 编译时出现异常。异常消息是:类型 '编辑服务',提供 作为 ServiceHost 指令中的 Service 属性值,或 在配置元素中提供 system.serviceModel/serviceHostingEnvironment/serviceActivations 可以 找不到.. ---> System.InvalidOperationException:类型 '编辑服务',提供 作为 ServiceHost 指令中的 Service 属性值,或 在配置元素中提供 system.serviceModel/serviceHostingEnvironment/serviceActivations 可以 找不到。

                  通常我们在第一次部署新的 IIS 托管 WCF 服务时遇到此问题。在非主服务器上,在“IIS 管理器”中,App Pool 上有一个红叉,您可以通过双击 AppPool 然后按 OK 来修复它(无需更改任何内容)。您甚至不需要回收 AppPool。

                  但是,我们刚刚在添加使用预先存在的 AppPool 的服务的新实例时发生了这种情况。在那种情况下,使用同一个 AppPool 的其他东西仍在工作,只是新的东西失败了。在这种情况下,AppPool 上没有“红十字”,但同样的解决方案仍然有效。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-09-12
                    相关资源
                    最近更新 更多