Dot*_*ude 13 .net wcf .net-3.5
我有一个托管在Web应用程序(IIS)中的WCF服务.我需要暴露1个终点wsHttp而另一个终止netTcp.我在IIS7环境中,使我可以托管非基于HTTP的服务.无论如何,当我浏览时.svc使用浏览器文件,我收到错误:
无法激活该服务,因为它不支持ASP.NET兼容性.为此应用程序启用了ASP.NET兼容性
通过谷歌搜索,我意识到WCF以两种模式运行 - 混合和ASP.NET兼容.当我应用属性时
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Run Code Online (Sandbox Code Playgroud)
但是,似乎一旦我将此属性应用于服务合同实现,我就无法使用非HTTP绑定.
如何设置它以便:
这里发生了很多事情.首先,除非您实际使用的是ASP.net功能,否则不应使用兼容模式.要关闭它,请按照Kirk的建议,并从代码中删除此行:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Run Code Online (Sandbox Code Playgroud)
兼容模式不仅仅是托管HTTP服务所必需的,只有当您想要使用不在WCF中的ASP.net功能(或者需要将旧的asmx服务移植到WCF而不更改其他代码)时.
第二个问题是使用IIS托管非HTTP绑定.这仅适用于IIS 7,并且仅使用WAS.ASP.net兼容性不适用于非HTTP绑定,因为ASP.net需要HTTP.
因此,只要启用了兼容性模式,您尝试做的就是不可能的.删除它,然后事情应该工作.
据猜测,您已经为 IIS 应用程序打开了 ASP.NET 兼容性设置。 这个链接似乎是相关的。
\n\n我建议您关闭 ASP.NET 兼容模式。我已经从 IIS 中的同一应用程序运行 net.tcp 和 basicHttp 端点,没有出现问题。
\n\n编辑:这是您需要进行/检查的配置更改(从提供的链接)。该值应从“false”更改为“true”。
\n\n<system.serviceModel>\n <serviceHostingEnvironment aspNetCompatibilityEnabled=\xe2\x80\x9dtrue\xe2\x80\x9d />\n</system.serviceModel>\nRun Code Online (Sandbox Code Playgroud)\n