.net – WCF托管在Web应用程序和兼容性模式下

我在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.

所以只要启用兼容性模式,你所要做的就是不可能的.删除它,然后事情应该工作.

相关文章

vue阻止冒泡事件 阻止点击事件的执行 <div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些