2011-03-12 37 views
37

我正在开发一个用于测试的简单wcf服务。当我使用本地IIS 7.5测试此服务时,它可以正常工作。但是,当我在网站IIS主机,我收到此错误:wcf服务中的ServiceHost指令中的服务类型问题

The type 'WcfServiceLibrary1.Service1', provided as the Service attribute value in the ServiceHost directive, or provided in the configuration element system.serviceModel/serviceHostingEnvironment/serviceActivations could not be found.

而我的ServiceHost是:

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

请帮我解决这个问题

+0

我认为我的程序集有问题 – 2011-03-12 16:59:25

+6

**您将哪些文件部署到IIS Web服务器?你需要:一个虚拟目录,其中包含* .svc文件,以及一个包含你的WCF服务的DLL的bin目录。 – 2011-03-12 17:06:28

+0

是的,我在我的主机空间创建一个目录并将我的所有项目(WcfServiceLibrary1)复制到我的目录(用于测试)。但我的问题没有解决!在我的项目中存在.svc文件和服务与本地iis正常工作 – 2011-03-12 17:13:30

回答

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

* .dll文件(包括我的服务)已部署在Bin文件夹中 – 2011-03-12 17:14:33

+0

请给我一个示例ServiceHost完全合格的类型名称 – 2011-03-12 17:15:57

+0

@hamed ajorloo - 已更新的答案 – 2011-03-12 23:08:18

4

最后我的问题解决了。

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

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

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

+1

我已经将我的用户添加为普通目录,并且需要将其转换为应用程序。 – tsilb 2013-08-13 15:51:02

+0

上面的评论是我必须做的:在我的本地主机上,目录是一个应用程序或虚拟目录,当我部署到www时,我只是在那里找到了一些东西。 – pdschuller 2014-06-24 17:50:40

8

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

事实证明,该服务引用了一个未被部署的DLL。这是一个超级特例,因为它是一个系统DLL(System.Web.Helpers),因此该项目甚至没有对它的引用,因此“Copy Local”未设置为true。

+1

似乎是一个荒谬的事情来检查,但我的DLL也失踪了。 – 2014-05-15 18:03:52

+0

我有一个未设置为“复制本地”的Microsoft.Identity程序集,并且在部署到生产时仅生成此错误,但在本地运行时未生成此错误。令人难以置信的烦人,但真实。 – 2014-05-23 02:00:47

+0

我的数据服务引用的dll从bin \文件夹中丢失,并且生成了该错误。添加了缺失的DLL,服务工作。 – 2015-04-23 18:54:49

0

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

39

因为我无法找到这表明在任何的问题,我看遍了这一点,在这里将我的情况:

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

+4

这也得到了我,同时把我的第一个'你好世界'WCF服务。如果在后面的代码中更改命名空间,请不要忘记右键单击.svc,选择'show markup',然后按照Jac的说法,在那里编辑命名空间。 – Ted 2013-07-22 14:15:24

+0

直到我看到这个时候才会发疯。谢谢 – Ric 2013-12-19 10:43:07

+2

如果您将外部WCF服务应用程序注入到下面的ASP.NET Web应用程序中,则此命名空间修补程序也适用。确保命名空间中serviceActivations规定: ' <添加服务= “MyServicesNamespace.MyService” relativeAddress =“〜/ PathTo/MyService.svc“/> ' – CrazyPyro 2014-01-21 21:57:08

3

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

我正在查找是否将我的开发计算机上的IIS应用程序指向实际的项目目录,其中驻留了WCF服务应用程序所需的web.config,MyService.svc和bin文件夹,它只是不起作用,并抛出这个错误。尽管四重检查每个设置,并确保事物与其他简单的工作WCF应用程序相同。

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

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

+0

男人,我希望我可以高举这1000次。我花了大约2个小时寻找解决方案。 – Anarion 2014-02-20 20:13:59

1

由于我不能投票@jeromeyers现在的答案,我想补充说,这是我发现这个问题的解决方案。

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

“的名字开始与一个无效字符错误处理资源“文件:/// C:/ ...

<%@ServiceHost”

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

4

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

7

IIS默认预计会看到虚拟目录中的svc文件以及bin文件夹内的二进制文件(如marc_s注释)。

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

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

1

尽管这与问题(不是网络iis)略有不同:我通过搜索来到这里,因为我得到这个错误试图调试我的服务 - 如果你在一个解决方案中有多个服务,这个错误会如果尚未构建相关解决方案,则会发生此问题,因此在尝试访问DLL时未创建该DLL。所以对任何人来说,确保在本地运行整个解决方案!

1

有这个问题,运行嵌入到我的解决方案中的测试项目。

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

0

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

0

它对我来说也是一样,解决方案是创建一个名为“bin”的forder,并将dll放在它的内部。然后,刷新IIS上的网站,这就是所有

0

我也有这个问题,对我来说魔术是什么重新启动IIS。 这是一个非常奇怪的错误。

0

enter image description hereenter image description here

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

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目录。 您现在需要将Service(例如:Service1.svc)从根目录移动到App_Code目录中。 所以,你将有App_Code文件\ Service1.svc

如果你浏览服务 http://localhost:63309/Service1.svc它应该工作。

2

检查在“SeviceHost”的“Service”中写入的命名空间和类是否正确。它应该是Service="namespace.classname"

+0

这为我修好了。点击'转换到web应用程序项目'后运行的转换代码给了(前一个网站项目)一个新的命名空间,它不在svc文件中的服务类名称前面。 – 2016-10-17 20:20:58

1

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

当然,我们都得到大量的DLL项目。原来,我的解决方案中的一些旧组件是针对.Net 4.5,而较新的dll是使用4.5.1构建的。当4.5个dll引用4.5.1 dlls ....不知道为什么我是快乐的小豚鼠成为我的团队中第一个找到这个的。虽然修复很明显并且非常简单,但是所有的dll都需要针对相同的.Net运行时。

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

+0

在我的情况下,原因是类似的。 ServiceHost引用到InterfaceLib中,该引用由.svc文件中指定的服务实现 – krzyski 2017-04-13 09:45:44