我在Web应用程序(IIS)中托管了一个WCF服务.我需要通过wsHttp暴露1个终点,通过netTcp暴露另外一个终点.我在一个IIS7环境中,使我有可能托管非基于HTTP的服务.无论如何,当我使用浏览器浏览.svc文件时,我得到错误:
The service cannot be activated because it does not support ASP.NET
compatibility. ASP.NET compatibility is enabled for this application
通过谷歌搜索,我意识到WCF运行在两种模式 – 混合和ASP.NET兼容.当我应用属性
[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
但是,一旦将此属性应用于服务契约实现,我就不能使用非HTTP绑定.
如何设置,以便:
>我可以支持非HTTP端点
>我可以在Web应用程序上托管该服务
>我不创建多个服务,一个打开了aspnet兼容,另一个关闭
解决方法
这里有很多事情.首先,除非您实际上正在使用ASP.net功能,否则不应使用兼容性模式.要关闭它,请遵循Kirk的建议,并从您的代码中删除此行:
[AspNetCompatibilityRequirements( RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
只有托管HTTP服务不需要兼容性模式,只有您希望使用不在WCF中的ASP.net功能(或者需要在不更改其他代码的情况下将旧的asmx服务端口连接到WCF).
第二个问题是使用IIS托管一个非HTTP绑定.这仅适用于IIS 7,并且仅使用WAS. ASP.net兼容性不适用于非HTTP绑定,因为ASP.net需要HTTP.
所以只要启用兼容性模式,你所要做的就是不可能的.删除它,然后事情应该工作.