找不到 ServiceHost 指令中的 Service 属性值

我试图用 IIS6主机托管我的服务,但总是遇到这个异常。

    Server Error in '/WebServices' Application.
--------------------------------------------------------------------------------


The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.


Exception Details: System.InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.


Source Error:


An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.


Stack Trace:




[InvalidOperationException: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found.]
System.ServiceModel.Activation.ServiceHostFactory.CreateServiceHost(String constructorString, Uri[] baseAddresses) +6714599
System.ServiceModel.HostingManager.CreateService(String normalizedVirtualPath) +604
System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +46
System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +654


[ServiceActivationException: The service '/WebServices/dm/RecipientService.svc' cannot be activated due to an exception during compilation.  The exception message is: The type 'QS.DialogManager.Communication.IISHost.RecipientService', provided as the Service attribute value in the ServiceHost directive could not be found..]
System.ServiceModel.AsyncResult.End(IAsyncResult result) +15626880
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +15546921
System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(HttpApplication context, Boolean flowContext) +265
System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +227
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +80
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +171








--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3082; ASP.NET Version:2.0.50727.3082

我完全没有头绪,除了它似乎找不到我的程序集。应使用公共类正确编译代码。

这是我的.svc 文件:

<%@ ServiceHost Language="C#" Debug="true" Service="QS.DialogManager.Communication.IISHost.RecipientService" CodeBehind="RecipientService.svc.cs" %>

我已经尝试创建一个非常非常简单的服务,只包含没有太看看这是否会工作,但仍然相同的老错误出现。

The type 'IISHost.Service1', provided as the Service attribute value in the ServiceHost directive could not be found.
197288 次浏览

选择一:

此消息通常是由于 IIS7配置问题造成的。如果您习惯于创建一个指向服务所在文件夹的虚拟目录,那么该目录将不再有效。现在,您需要使用“ CreateApplication...”选项。

其他选项 :

问题还可能出现在 svc 文件中与 svc.cs 文件中不同的名称空间中。

在 svc 文件命名空间中必须采用以下格式。

Service="Namespace.SvcClassName"

有两个关键问题: (1)如果你在 Silverlight 工作,你应该使用支持 Silverlight 的 WCF 服务,而不是非 Silverlight 的 WCF 服务; 这将更新 Web。为绑定配置并允许类型可见; (2)将新服务中的类名称与服务名称匹配——这里的目标是创建一个 wsdl... ... 这样你就知道服务的功能是向你的 Silverlight 客户端和 Web 公开的; 让服务与类匹配会有所帮助。如果你把名字搞混了,你就得编辑网页。在3个地方进行配置(serviceBehavior、 services 和 bindings)。

有很多真诚的尝试来帮助解决这个问题的人,但是对我没有帮助,所以应该强调的是,这篇文章是针对 Silverlight 解决方案的,它可能不适用于在客户端/Web 配置中不使用 Silverlight 3的人。

希望能有帮助。

我知道这可能是一个“显而易见”的答案,但是它让我有点迷惑。确保 bin 文件夹中有项目的 dll。当这项服务发布后,发布它的人删除了这些 dll 因为他以为它们在 GAC 里。专门针对该项目的那个(QS.DialogManager。通信。RecipientService.dll,在本例中)不存在。

出于完全不同的原因,出现了相同的错误。

您应该将 bin 文件夹路径配置为服务本地 bin。

我也有同样的问题,但不知道是什么引起的。我通过使用 Debug/Start New Instance 从 Debug 更改为 Release and Run 来解决这个问题。之后,它在发布和调试中运行。那是魔法。

我有这个问题-我的服务类型是在 GAC。它将工作,如果我添加包含类型的 dll 到 bin 文件夹,但因为它是在 GAC 这不是我想要的。我最终将其添加到该服务的 web.config 中

<system.web>
<customErrors mode="RemoteOnly" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="[name in GAC], Version=[version in GAC], Culture=neutral, PublicKeyToken=[ac token]" />
</assemblies>
</compilation>
</system.web>

而且它不需要在垃圾箱文件夹中的任何 dls 就可以工作。

在服务中添加服务引用或复制 dll。

我几乎解决了同样的问题。以下是我的建议——该错误意味着没有找到 Service 属性中引用的对象。要找到对象,应用程序或库必须将输出生成到 bin 文件夹。

您可以编辑应用程序的属性页并指定到“ bin”的输出路径。

我在尝试使用微软时也遇到了这个问题。服务模式。样本。计算器 WCF 示例。我正在使用 IIS 5.1。我通过确保自动生成的网站(servicemodelsample)不是应用程序来解决这个问题。右键单击文件夹,单击“属性”,然后单击“创建”按钮。

仔细检查. svc 文件中的 ServiceHost 指令是否引用了正确的类型。

  1. 在包含 Web 服务的 VS 项目中,打开。在 XML 编辑器中的 svc 文件(右键单击该文件,Open With... ,选择 XML (Text) Editor,OK)。
  2. 注意“ Service”属性值。
  3. 确保它与服务的完全限定类型名匹配。这包括命名空间 + 类型名称。例如,如果命名空间是“ MyCompany。税务局。服务”,类名为“ MyService”,则 Service 属性值应为“ MyCompany”。税务局。“服务,我的服务”。

我遇到了同样的异常,这是由于. svc 文件中没有正确提到 Type

我修正了下面的错误。

如果你的.svc.cs 有这样的类

namespace Azh.Services.MyApp
{
public class WcfApp : FI.IWcfAppService
{
...
}
}

为此. svc 文件应该如下所示

<%@ ServiceHost Language="C#" Debug="true" Service="Azh.Services.MyApp.WcfApp" CodeBehind="WcfApp.svc.cs" %>

在添加服务引用之前构建解决方案解决了我的问题。

这听起来可能微不足道,但值得一提的是: 您必须 建造服务(在 VisualStudio 中)-然后将在 Bin 子文件夹。

当服务在服务器上“部署”时-bin 文件夹需要包含 DLL 文件-否则将抛出此错误..。

当我试图在同一个解决方案中添加第一个支持 Silverlight 的 WCF 的 Service 引用时,我得到了这个错误。我只负责建造。网络项目和它开始工作。.

如果您重命名了任何内容,请验证(Properties/) AssemblyInfo.cs是否正确,以及服务文件中的头文件是否正确。

服务名称

<%@ ServiceHost Language="C#" Debug="true" Service="Company.Namespace.WcfApp" CodeBehind="WcfApp.svc.cs" %>

Service.svc.cs中的命名空间对齐

中的服务名称不匹配而发生此错误。SVC 文件。您可能已经更改了实现接口的服务类的名称。解决办法就是打开。SVC 文件,并且与 Service 属性和 CodeBehind 属性完全匹配。所以你的。SVC 文件应该是这样的

<%@ ServiceHost Language="Language you are using" Debug="bool value to enable debugging" Service="Service class name that is implementing your Service interface" Codebehind="~/Appcode/Class implementing interface.cs"%>. for eg.


<%@ ServiceHost Language="C#" Debug="true" Service="Product.Service" CodeBehind="~/AppCode/Product.Service.cs"%>

这个例子是为了。Svc 文件,使用 C # 语言,启用调试,服务类实现接口,这个类位于名为 Service.cs 的 app 文件夹中,Product 是 Service 类的名称空间。

另外,请在服务配置文件中进行相应的更改。

<system.serviceModel>
<services>
<service name="Product.Service" behaviorConfiguration="ServiceBehavior">
<endpoint address="" binding="wsHttpBinding" contract="Product.Iservice">
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<behavior name="ServiceBehavior">
<serviceMetaData httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</behaviors>
</system.serviceModel>

我也有同样的问题,找到了这个帖子,尝试了所有方法,除了 nogo。

然后我又浪费了4个小时的时间。

然后我发现编译设置从64位更改为 x86。当我把它改回64位时,它工作了。不知道确切原因,但可能是 IIS 应用程序池没有设置为允许32位应用程序。

我的 Servicedll 在 svc 文件所在的 bin 文件夹中。将 dll 移动到 root bin 文件夹解决了这个问题。

在我的情况下,右击虚拟目录并选择“转换为应用程序”工作!

我今天面对这个错误,原因是: IIS 用户没有访问应用程序文件夹的权限。我给了应用程序根文件夹的读权限。

  1. 确保 markup (svc)文件具有名称 pace.classname 和 codebehind 的 service 属性 classname.svc.cs

  2. 重新构建解决方案

  3. 从本地 IIS 重新启动应用程序池一次。