我正在尝试使用IIS 6托管我的服务,但我一直得到这个例外.
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.
Peter Stegna.. 72
问题也可能是svc文件中的不同命名空间,因为它位于svc.cs文件中.
在svc文件中,命名空间必须采用以下格式.
Service="Namespace.SvcClassName"
这是我的确切问题.我完成了我的解决方案并在解决方案中分离了两个项目之间的命名空间,忘了更新.svc参考. (2认同)
你钉了它,网上的大多数tuitorials都在示例WCF服务和接口周围放置了一个名称空间,需要将它带到service.svc页面. (2认同)
这对我有帮助.我更改了我的命名空间,但无法弄清楚如何在VS2010 Express中打开服务文件(servicename.svc).我最终进入文件系统并将文件直接打开到notepad ++并在那里进行编辑. (2认同)
Konstantin T.. 66
方案一:
此消息通常是由于IIS 7配置问题.如果您习惯于创建指向服务所在文件夹的虚拟目录,则该目录不再有效.现在,您需要使用"创建应用程序..."选项.
其他选择:
WCF:找不到作为Service属性提供的类型
无法找到作为ServiceHost指令中的Service属性值提供的类型.
是的,现在它有效!我之前想念你,并解决了将子文件夹变成虚拟应用程序的问题.非常感谢! (4认同)
在我的情况下,事实证明项目输出超出了网站文件夹(通过将输出文件夹更改为'bin \'来修复) (3认同)
验证IIS6中的虚拟文件夹是否为Web应用程序 (2认同)
你有没有把它复制到vroot下的bin目录? (2认同)
小智.. 31
我知道这可能是"明显的"答案,但它让我感到沮丧.确保bin文件夹中的项目有一个dll.当该服务发布时,发布它的人删除了dll,因为他认为他们在GAC中.专门用于项目的那个(QS.DialogManager.Communication.IISHost.RecipientService.dll,在这种情况下)不在那里.
出于非常不同的原因,出现相同的错误.
问题也可能是svc文件中的不同命名空间,因为它位于svc.cs文件中.
在svc文件中,命名空间必须采用以下格式.
Service="Namespace.SvcClassName"
方案一:
此消息通常是由于IIS 7配置问题.如果您习惯于创建指向服务所在文件夹的虚拟目录,则该目录不再有效.现在,您需要使用"创建应用程序..."选项.
其他选择:
WCF:找不到作为Service属性提供的类型
无法找到作为ServiceHost指令中的Service属性值提供的类型.
我知道这可能是"明显的"答案,但它让我感到沮丧.确保bin文件夹中的项目有一个dll.当该服务发布时,发布它的人删除了dll,因为他认为他们在GAC中.专门用于项目的那个(QS.DialogManager.Communication.IISHost.RecipientService.dll,在这种情况下)不在那里.
出于非常不同的原因,出现相同的错误.
由于.SVC文件中的服务名称不匹配而发生此错误.可能您可能已经更改了实现接口的服务类的名称.解决方案是打开.SVC文件并与Service属性和CodeBehind Attribute完全匹配.所以你的.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"%>
此示例适用于使用C#语言的.svc文件,启用调试,Service类实现接口,此类位于名为Service.cs的app文件夹中,Product是Service类的名称空间.
另外请在服务配置文件中进行相应的更改.
仔细检查您是否从.svc文件中的ServiceHost指令引用了正确的类型.这是如何做...
在包含Web服务的VS项目中,在XML编辑器中打开.svc文件(右键单击文件,打开方式...,选择XML(文本)编辑器,确定).
请注意"服务"属性值.
确保它与服务的完全限定类型名称匹配.这包括命名空间+类型名称.例如,如果命名空间是"MyCompany.Department.Services"并且该类称为"MyService",则Service属性值应为"MyCompany.Department.Services.MyService".
我有相同的异常,这是由于.svc文件中没有正确提到的类型
我纠正了下面的修复.
如果你的.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" %>