37

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

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

我的 ServiceHost 是:

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

请帮我解决这个问题

4

19 回答 19

41

因为我在我查看的任何问题中都找不到这个建议,所以在这里添加我的案例:

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

于 2012-12-17T22:40:43.493 回答
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" %>

尽管您可能希望摆脱那里的换行符。

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

于 2011-03-12T17:00:50.757 回答
8

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

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

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

于 2013-09-19T20:58:51.317 回答
8

I had the same issue only when publishing my service but it worked locally.

It turned out to be that the service was referencing a DLL that wasn't being deployed. It's a super special case because it was a system dll (System.Web.Helpers) and thus the project didn't even have a reference to it and thus the "Copy Local" wasn't set to true.

于 2012-09-12T14:27:47.113 回答
4

I had this same problem after I deployed a working service to a new location (new site) in IIS. In inetmgr under the Default Website tree, I hadn't right-clicked the new site and selected Convert to Application - all working now!

于 2013-03-10T00:55:58.983 回答
4

终于我的问题解决了。

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

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

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

于 2011-03-13T09:53:27.640 回答
3

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

我发现如果我将我的开发机器上的 IIS 应用程序指向实际的项目目录,其中驻留了 WCF 服务应用程序所需的 web.config、MyService.svc 和 bin 文件夹,它只是无法工作,并且正在抛出这个错误。尽管对每个设置进行了四次检查,并确保事情与其他简单、有效的 WCF 应用程序相同。

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

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

于 2012-12-23T22:22:58.123 回答
2

检查“服务主机”的“服务”中写的命名空间和类是否正确。应该是Service="namespace.classname"

于 2016-08-04T06:18:14.730 回答
1

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

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

于 2014-02-13T16:44:30.343 回答
1

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

于 2012-10-09T13:38:43.063 回答
1

由于我目前无法投票@jeromeyers 回答,我想补充一点,这是我为这个问题找到的解决方案。

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

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

<% @ServiceHost "

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

于 2013-02-05T17:23:06.040 回答
1

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

于 2014-01-02T14:29:08.007 回答
1

奇怪的是,在查看并尝试其他建议后,我仍然收到错误消息:类型',作为 ServiceHost 指令中的服务属性值提供,或在配置元素 system.serviceModel/serviceHostingEnvironment/serviceActivations 中提供被发现。

当然,我们都会得到包含大量 DLL 的大型项目。结果发现我的解决方案中的一些较旧的组件针对.Net 4.5,而较新的 dll 是使用 4.5.1 构建的。当 4.5 dll 引用 4.5.1 dll .... 不知道为什么我是快乐的小豚鼠,是我团队中第一个发现这个的。虽然修复很明显也很容易,但所有 dll 都针对相同的 .Net 运行时。

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

于 2016-08-20T13:57:54.457 回答
1

确保您编译的 dll 被移动到服务(IIS 目录)目录。

例如,有时 Jenkins 不会自动移动它们。

于 2020-02-11T06:24:11.750 回答
0

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

于 2014-03-31T17:10:00.333 回答
0

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

于 2014-07-31T16:43:18.133 回答
0

它发生在我身上,解决方案是创建一个名为“bin”的文件夹并将 dll 放在其中。然后,在 IIS 上刷新网站,仅此而已

于 2014-05-07T08:57:42.723 回答
0

在此处输入图像描述在此处输入图像描述

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

于 2015-01-22T04:06:52.667 回答
0

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

您需要做两件事才能在 IIS 上,甚至在 Visual Studio 的迭代 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它应该可以工作。

于 2016-04-10T07:29:22.370 回答