我在Web应用程序(IIS)中托管了WCF服务。我需要在wsHttp
之上公开1个结束点,而在netTcp
之上公开另一个结束点。我在IIS7环境中,使我可以托管非基于HTTP的服务。无论如何,当我使用浏览器浏览。svc
文件时,我收到错误:
无法激活该服务,因为它不支持ASP.NET 兼容性。为此应用程序启用了ASP.NET兼容性
通过谷歌搜索,我意识到WCF以两种模式运行 - 混合和ASP.NET兼容。当我应用属性
时[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
但是,一旦我将此属性应用于服务合同实现,我似乎无法使用非HTTP绑定。
如何设置以便:
答案 0 :(得分:7)
这里发生了很多事情。首先,除非您实际使用的是ASP.net功能,否则不应使用兼容模式。要关闭它,请按照Kirk的建议,并从代码中删除此行:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
仅仅为了托管HTTP服务不需要兼容性模式,只有当您想要使用不在WCF中的ASP.net功能时(或者需要将旧的asmx服务移植到WCF而不更改其他代码)
第二个问题是使用IIS托管非HTTP绑定。这仅适用于IIS 7,并且仅使用WAS。 ASP.net兼容性不适用于非HTTP绑定,因为ASP.net需要HTTP。
因此,只要启用了兼容性模式,您尝试做的就是不可能的。删除它,然后事情应该工作。
答案 1 :(得分:4)
猜测,您已为IIS应用程序启用了ASP.NET兼容性设置。 This link似乎是相关的。
我建议您关闭ASP.NET兼容模式。我已经从IIS中的同一个应用程序运行net.tcp和basicHttp端点而没有问题。
编辑:这是您需要进行/检查的配置更改(来自提供的链接)。该值应从“false”更改为“true”。
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled=”true” />
</system.serviceModel>
答案 2 :(得分:1)
请尝试在ServiceHostingEnvironment中将 multipleSiteBindingsEnabled 设置为true。我不是WCF的专家,但在经历了这个问题并阅读了一堆网站之后,我认为这是有意义的,因为你使用的是TCP和HTTP服务端点。
希望这有帮助。
答案 3 :(得分:0)
我也遇到过这个问题 它是由于将一些新代码迁移到现有的WCF项目中而引起的,这些代码引用了System.Web命名空间但实际上并不需要它。 删除那些使用语句解决了我的问题。
我预计必须追踪需要该命名空间的代码,但很幸运。