WCF托管在Web应用程序和兼容模式中

时间:2010-03-03 22:06:11

标签: .net .net-3.5 wcf

我在Web应用程序(IIS)中托管了WCF服务。我需要在wsHttp之上公开1个结束点,而在netTcp之上公开另一个结束点。我在IIS7环境中,使我可以托管非基于HTTP的服务。无论如何,当我使用浏览器浏览。svc文件时,我收到错误:

  

无法激活该服务,因为它不支持ASP.NET   兼容性。为此应用程序启用了ASP.NET兼容性

通过谷歌搜索,我意识到WCF以两种模式运行 - 混合和ASP.NET兼容。当我应用属性

[AspNetCompatibilityRequirements(
       RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] 

但是,一旦我将此属性应用于服务合同实现,我似乎无法使用非HTTP绑定。

如何设置以便:

  • 我可以支持非HTTP端点
  • 我可以在Web应用上托管服务
  • 我没有创建多个服务,其中一个打开了aspnet兼容性,另一个关闭了

4 个答案:

答案 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命名空间但实际上并不需要它。 删除那些使用语句解决了我的问题。

我预计必须追踪需要该命名空间的代码,但很幸运。