Wcf服务中ServiceHost指令中的服务类型问题

ham*_* aj 37 wcf servicehost

我正在开发一个简单的wcf服务进行测试.当我使用本地IIS 7.5测试此服务时,它可以正常工作.但是当我在Web IIS中托管它时,我收到此错误:

无法找到作为ServiceHost指令中的Service属性值提供的类型'WcfServiceLibrary1.Service1',或者在配置元素system.serviceModel/serviceHostingEnvironment/serviceActivations中提供的类型'WcfServiceLibrary1.Service1'.

我的ServiceHost是:

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

请帮我解决这个问题

Jac*_*Jac 39

因为我在为此查看过的任何问题中都找不到这个建议,请在此处添加我的案例:

当我手动更改文件MyService.svc.cs中的命名空间时,我遇到了这个问题,并且没有更改相应文件MyService.svc中的服务名称 - 结果证明它需要是Service ="namespace.classname".

  • 这也让我得到了我的第一个'Hello World'WCF服务.如果您更改后面代码中的命名空间,请不要忘记右键单击.svc,选择"show markup",正如Jac所说,也在那里编辑命名空间. (4认同)
  • 如果要将外部WCF服务应用程序注入到下面的ASP.NET Web应用程序中,则此命名空间修补程序也适用.确保在serviceActivations中指定了名称空间:`<system.serviceModel> <serviceHostingEnvironment aspNetCompatibilityEnabled ="true"> <serviceActivations> <add service ="MyServicesNamespace.MyService"relativeAddress ="〜/ PathTo/MyService.svc"/> </ serviceActivations> </ serviceHostingEnvironment> </system.serviceModel>` (2认同)

And*_*tan 21

尝试使用程序集限定类型名称.

这是 [Fully Qualified Type Name], [Assembly]

[Fully Qualified Type Name]最常见的情况下,在哪里YourNamespace.YourType

而且[Assembly],在最常见的情况下YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

它比这更复杂(泛型类型,嵌套类型等) - 但在你的情况下不太可能如此.

如果您的应用程序使用默认的构建选项,那么我将冒险猜测该指令应该是这样的:

<%@ ServiceHost Language="C#" Debug="true" 
   Service="WcfServiceLibrary1.Service1, 
            WcfServiceLibrary1, 
            Version=1.0.0.0, 
            Culture=neutral, 
            PublicKeyToken=null" %>
Run Code Online (Sandbox Code Playgroud)

虽然你可能想要摆脱那里的换行.

此外,请确保您的dll实际已部署

  • *.dll文件(包括我的服务)已部署在Bin文件夹中 (2认同)

小智 8

我只有在发布我的服务时才遇到同样的问题,但它在本地工作.

原来,该服务引用了一个未部署的DLL.这是一个超级特例,因为它是一个系统dll(System.Web.Helpers),因此项目甚至没有引用它,因此"Copy Local"没有设置为true.


Nij*_*Nij 8

IIS默认希望在虚拟目录中看到svc文件,在bin文件夹中看到二进制文件(如marc_s所述).

但是,WCF库项目的默认构建配置是在bin/Debug文件夹(或bin/Release)内构建.您可以在项目属性"构建"选项卡上将"输出路径"更改为"bin /".

今天改变这个为我解决了这个错误.