wcf服务中的ServiceHost指令中的服务types问题
我正在开发一个简单的wcf服务来testing。 当我使用本地IIS 7.5testing此服务时,它正常工作。 但是,当我在web IIS中托pipe它,我收到此错误:
无法find在ServiceHost指令中作为Service属性值提供或者在configuration元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供的types“WcfServiceLibrary1.Service1”。
而我的ServiceHost是:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1" %>
请帮我解决这个问题
因为我无法find这个问题,所以我在这里添加我的案例:
当我手动更改文件MyService.svc.cs中的名称空间并且没有更改相应文件MyService.svc中的服务名称时,发生此问题 – 事实certificate,它需要Service =“namespace.classname”。
尝试使用程序集限定的types名称。
这是[Fully Qualified Type Name], [Assembly]
在[Fully Qualified Type Name]
中,最常见的情况是YourNamespace.YourType
[Assembly]
在最常见的情况下是YourAssemblyName, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
它比这更复杂(generics,嵌套types等) – 但不太可能是这样的你的情况。
如果你的应用程序使用默认的构build选项,那么我会冒险猜测指令应该是这样的:
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary1.Service1, WcfServiceLibrary1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" %>
尽pipe你可能想要摆脱那里的换行符。
此外,请确保您的dll实际上已被部署
我只有在发布我的服务时才遇到同样的问题,但是在本地工作。
事实certificate,该服务引用了一个没有被部署的DLL。 这是一个超级特例,因为它是一个系统DLL(System.Web.Helpers),因此该项目甚至没有引用它,因此“复制本地”未设置为true。
IIS默认预计会看到虚拟目录中的svc文件以及bin文件夹内的二进制文件(如marc_s注释)。
但是,WCF库项目的默认构buildconfiguration是在bin / Debug文件夹(或bin / Release)内部构build的。 您可以在项目属性“生成”选项卡上将输出path更改为“bin /”。
今天改变这个解决了这个错误。
在将工作服务部署到IIS中的新位置(新站点)之后,我遇到了同样的问题。 在默认网站树下的inetmgr中,我没有右键单击新网站并select“转换为应用程序” – 现在所有工作都正常!
最后我的问题解决了。
我删除了主机中的服务目录,并在主机空间中创build了一个新的虚拟目录。 然后,我将我的服务复制到创build它的新目录中。
现在我可以浏览服务的.svc文件,我的客户端将使用该服务。
我不明白为什么发生这个问题! 我有点困惑!
标记为答案的答案很难理解。 事实上,虽然这导致我解决了类似的问题,但我不知道是不是因为我准确理解了作者的意思。
我正在查找是否将我的开发计算机上的IIS应用程序指向了驻留web.config,MyService.svc和bin文件夹的实际项目目录,WCF服务应用程序所需的仅仅是不起作用,错误。 这是尽pipe四重检查每一个设置,并确保事情相当于其他简单的,工作的WCF应用程序。
最终,我通过发布到不同的目录来解决问题,而不是依赖于项目文件和目录本身。
也许是因为这些文件是在Visual Studio中打开的,因为我试图通过IIS运行WCF应用程序? 我不知道,但Visual Studio提供的localhost:59871 / …正在工作。 我不知道该实例是使用项目文件还是临时发布的版本。
检查在“SeviceHost”的“Service”中写入的名称空间和类是否正确。它应该是Service="namespace.classname"
。
由于我不能投票@jeromeyers现在的答案,我想补充说,这是我find了解决这个问题的解决scheme。
有人已经复制并粘贴了一个svc文件和关联的合同和代码文件到一个新的项目,但他们并没有更新名称空间和类名。 非常令人沮丧的跟踪下来,因为这个错误开始:
“名称是以无效字符开始的。处理资源错误'file:/// C:/ …
<%@ServiceHost“
当试图右键单击.svc文件并执行“在浏览器中查看”。
即使这与问题(不是networkingiis)略有不同:我通过search来到这里,因为我得到这个错误试图debugging我的服务 – 如果你有一个单一的解决scheme内的多个服务,这个错误将发生,如果解决scheme问题尚未构build,因此在尝试访问DLL时未创buildDLL。 所以对任何人来说,确保在本地运行整个解决scheme!
有这个问题运行embedded我的解决scheme的testing项目。
我必须在浏览器中查看,然后将该链接复制到新的服务引用(删除旧服务引用),然后粘贴,而不是使用服务引用中的发现实用程序button。
奇怪的是,在查看和尝试别人的build议之后,我仍然收到错误消息:“types”,作为ServiceHost指令中的Service属性值提供,或者在configuration元素system.serviceModel / serviceHostingEnvironment / serviceActivations中提供被发现。
当然,我们都得到大量的DLL项目。 原来,我的解决scheme中的一些较旧的组件是针对.Net 4.5,而较新的dll是使用4.5.1构build的。 当4.5 dlls引用4.5.1 dlls ….不知道为什么我是快乐的小豚鼠成为我的团队中第一个find这个。 虽然修复很明显,很容易,只是所有的dll目标相同的.net运行时。
只是希望Visual Studio会注意到在同一个解决scheme中的DLL应该都是针对相同的.Net运行时,并在构build时生成一个警告/错误,尤其是我们有一个解决scheme和一个项目引用,运行时不匹配…
这个问题的另一个原因是,当一个wcf服务从一个目录移动到另一个目录时,并且svc文件还没有被更新…最简单的解决scheme是仔细检查你的.svc文件并确保正确定义了服务定义。
当我将我的工作localhost服务上传到主机上的新位置时,我遇到同样的问题。 我创build一个新的虚拟目录,并通过Visual Studio(FTP)发布我的服务。 问题解决了。
它发生在我身上,解决的办法是创build一个名为“bin”的forder,并把dll放在里面。 然后,刷新IIS上的网站,这就是全部
我也有这个问题,对我来说,重新启动IIS有什么魔力。 这是一个非常奇怪的错误。
首次托pipeWCF服务应用程序,在IIS中? 许多人以某种方式解决了他们的问题。 但是,如果一切都是你的解决scheme是正确的,你的错误是关于在IIS中托pipe你的应用程序,那么当你添加你的网站时,确保你在IIS中的物理path被指向你的解决scheme的“bin”目录,如下面的屏幕截图所示。
请看https://msdn.microsoft.com/en-us/library/ms733766(v=vs.100).aspx
您需要做两件事才能在IIS上托pipe服务,甚至在Visual Studio的IISerxgrated 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)您需要在根目录下创build一个名为App_Code的目录。 您现在需要将Service(例如:Service1.svc)从根目录移动到App_Code目录。 所以你将有App_Code \ Service1.svc
如果您浏览服务http:// localhost:63309 / Service1.svc它应该工作。