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

时间:2011-03-12 16:57:37

标签: wcf servicehost

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

  

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

我的ServiceHost是:

<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %>

请帮我解决这个问题

19 个答案:

答案 0 :(得分:39)

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

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

答案 1 :(得分:20)

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

这是[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" %>

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

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

答案 2 :(得分:8)

我在发布服务时遇到了同样的问题,但它在本地工作。

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

答案 3 :(得分:8)

IIS默认希望看到虚拟目录中的svc文件,以及bin文件夹中的二进制文件(如marc_s所评论的那样)。

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

今天改变这一点为我解决了这个错误。

答案 4 :(得分:4)

最后我的问题解决了。

我删除了主机中的服务目录,并在主机空间中创建了一个新的虚拟目录。然后我将我的服务复制到我创建它的新目录中。

现在我可以浏览.svc文件以获取服务,我的客户端将使用该服务。

我不明白为什么会出现这个问题!我有点困惑!

答案 5 :(得分:4)

在我将工作服务部署到IIS中的新位置(新网站)后,我遇到了同样的问题。在默认网站树下的inetmgr中,我没有右键单击新网站并选择转换为应用程序 - 现在全部正常工作!

答案 6 :(得分:3)

标记为答案的答案很难理解。事实上,虽然它让我解决了我的类似问题,但我不知道是不是因为我准确地理解了作者的意思。

我发现是否将我的开发计算机上的IIS应用程序指向实际的项目目录,其中驻留了WCF服务应用程序所不能使用的web.config,MyService.svc和bin文件夹,以及抛出这个错误。尽管每个设置都进行了四重检查,并确保其他东西与其他简单,有效的WCF应用程序相同。

最终,我通过发布到不同的目录而不是依赖于项目文件和目录本身来解决问题。

也许是因为我试图通过IIS运行WCF应用程序时在Visual Studio中打开文件?我不知道,但Visual Studio提供localhost:59871 / ...正在工作。我不知道该实例是使用项目文件还是临时发布版本。

答案 7 :(得分:2)

检查命名空间和类是否写在&#34; Service&#34; &#34; SeviceHost&#34;是的。它应该是Service="namespace.classname"

答案 8 :(得分:1)

确保已编译的dll已移至服务(IIS目录) 目录。

例如,有时詹金斯(Jenkins)不会自动移动它们。

答案 9 :(得分:1)

奇怪的是,在查看并尝试其他建议之后,我仍然得到错误说: 在ServiceHost指令中作为Service属性值提供的类型&#39;或在配置元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供的类型&#39;无法找到。

当然,我们都有很多DLL的大型项目。事实证明,我的解决方案中的一些旧组件的目标是.Net 4.5,而较新的dll是使用4.5.1构建的。当4.5 dlls参考4.5.1 dlls ....不知道为什么我是幸福的小豚鼠成为我团队中第一个找到这个。虽然修复很明显且很容易,但是所有dll都针对相同的.Net运行时。

希望Visual Studio注意到同一解决方案中的DLL应该都针对相同的.Net运行时并在构建时生成警告/错误,特别是我们有一个解决方案和一个项目引用,并且运行时不匹配。 ..

答案 10 :(得分:1)

在运行我的解决方案中嵌入的测试项目时出现此问题。

我必须在浏览器中查看,然后将该链接复制到新服务引用(删除旧服务引用),然后粘贴它,而不是使用服务引用中的发现实用程序按钮。

答案 11 :(得分:1)

即使这与问题(不是web iis)略有不同:我通过搜索来到这里,因为我在尝试调试我的服务时遇到此错误 - 如果您在单个解决方案中有多个服务,则会发生此错误如果有问题的解决方案尚未构建,因此当您尝试访问它时不会创建DLL。所以对那里的任何人都要确保在本地运行整个解决方案是否构建好了!

答案 12 :(得分:1)

由于我现在不能投票@jeromeyers回答,我想补充一点,这是我在这个问题上找到的解决方案。

有人已经将svc文件以及相关的合同和代码文件复制并粘贴到新项目中,但是他们没有在任何地方更新名称空间和类名。因为这个错误开始跟踪这个非常令人沮丧:

“名称以无效字符开头。处理资源错误'file:/// C:/ ...

&lt;%@ServiceHost“

尝试右键单击.svc文件并执行“在浏览器中查看”时。

答案 13 :(得分:0)

当我将工作的localhost服务上传到主机上的新位置时,我遇到了同样的问题。 我创建了一个新的虚拟目录,并通过Visual Studio(FTP)向我发布了我的服务。解决了问题。

答案 14 :(得分:0)

对我来说也是如此,解决方案是创建一个名为“bin”的文件夹并将dll放在其中。然后,在IIS上刷新网站,这就是

答案 15 :(得分:0)

我也遇到过这个问题,对我来说,神奇的是重启IIS。 这是一个非常奇怪的错误。

答案 16 :(得分:0)

enter image description here enter image description here

首次在IIS中托管WCF服务应用程序? 许多人已经以某种方式解决了他们的问题。但是,如果一切都是您的解决方案是正确的,并且您的错误是关于在IIS中托管您的应用程序,那么确保您在添加网站时在IIS中的物理路径指向解决方案的“bin”目录,如下面的屏幕截图所示。

答案 17 :(得分:0)

请查看https://msdn.microsoft.com/en-us/library/ms733766(v=vs.100).aspx

您需要做两件事才能在IIS上托管服务,甚至在Visual Studio的itergrated IIS_EXPRESS上。

1)更新Web.Config以包含ServiceActivations

变化:

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />

<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
  <serviceActivations>
    <add service="API.Service1" relativeAddress="Service1.svc"/>
 </serviceActivations>
</serviceHostingEnvironment>

2)您需要在根目录中创建一个名为App_Code的目录。 您现在需要将服务(例如:Service1.svc)从根目录移动到App_Code目录中。 所以你将拥有App_Code \ Service1.svc

如果您浏览服务 http://localhost:63309/Service1.svc它应该有用。

答案 18 :(得分:0)

此问题的另一个原因通常是当wcf服务从一个目录移动到另一个目录,并且svc文件尚未更新时...最简单的解决方案是仔细检查.svc文件并确保服务定义是正确定义。