WCF The service cannot be activated because it does not support ASP.NET compatibility
作者:jiankunking 出处:http://blog.csdn.net/jiankunking
测试发布到虚拟目录中时发生的报错现象,由于不支持asp.net兼容性而导致服务无法激活启用。
具体错误信息如下:
Server Error in /Service2 Application. -------------------------------------------------------------------------------- The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as Allowed or Required. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as Allowed or Required. Source Error: An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. Stack Trace:
[InvalidOperationException: The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as Allowed or Required.] System.ServiceModel.Activation.HostedAspNetEnvironment.ValidateCompatibilityRequirements(AspNetCompatibilityRequirementsMode compatibilityMode) +120262 System.ServiceModel.Activation.AspNetCompatibilityRequirementsAttribute.System.ServiceModel.Description.IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase serviceHostBase) +31 System.ServiceModel.Description.DispatcherBuilder.ValidateDescription(ServiceDescription description, ServiceHostBase serviceHost) +190 System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost) +109 System.ServiceModel.ServiceHostBase.InitializeRuntime() +60 System.ServiceModel.ServiceHostBase.OnBeginOpen() +27 System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout) +50 System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout) +318 System.ServiceModel.HostingManager.ActivateService(String normalizedVirtualPath) +206 System.ServiceModel.HostingManager.EnsureServiceAvailable(String normalizedVirtualPath) +651 [ServiceActivationException: The service /Service2/DataService.svc cannot be activated due to an exception during compilation. The exception message is: The service cannot be activated because it does not support ASP.NET compatibility. ASP.NET compatibility is enabled for this application. Turn off ASP.NET compatibility mode in the web.config or add the AspNetCompatibilityRequirements attribute to the service type with RequirementsMode setting as Allowed or Required..] System.Runtime.AsyncResult.End(IAsyncResult result) +687598 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.End(IAsyncResult result) +190 System.ServiceModel.Activation.ServiceHttpHandler.EndProcessRequest(IAsyncResult result) +6 System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +96
-------------------------------------------------------------------------------- Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272
中文版错误信息:点击打开链接
解决方案:
1、web.config中增加
serviceHostingEnvironment aspNetCompatibilityEnabled="false"注意这个是放在 system.serviceModel 中的。
2、在wcf的服务类加上附加属性 AspNetCompatibilityRequirements
其实,通过阅读小注可以发现,下面两种方式均可:
小注:
1、ServiceHostingEnvironment.AspNetCompatibilityEnabled 属性:
获取一个值,该值指示此服务是否在 ASP.NET HTTP 应用程序管道的上下文中运行。
如果为当前 AppDomain 启用了 ASP.NET 兼容性,则为 true;否则为 false。 默认值为 false。
2、AspNetCompatibilityRequirementsMode 枚举:
指定 Windows Communication Foundation (WCF) 服务是否(或能否)以与 ASP.NET 兼容的模式运行。
尽管 WCF 模型旨在跨宿主环境和传输保持行为的一致性,但经常在一些方案中,应用程序中不要求这种程度的灵活性。 WCF 的 ASP.NET 兼容模式适用于具有以下特点的方案:不需要具有在 IIS 外部承载或通过 HTTP 之外的协议进行通信的能力,但使用 ASP.NET Web 应用程序平台的所有功能。
在默认的并行配置中,承载基础结构的 WCF 截获 WCF 消息并将其路由到 HTTP 管道之外;与此不同的是,在 ASP.NET 兼容模式中运行的 WCF 服务完全参与 ASP.NET HTTP 请求生命周期。 在兼容模式中,WCF 服务通过IHttpHandler 实现来使用 HTTP 管道,其方式类似于处理 ASPX 页和 ASMX Web 服务的请求。 因此,WCF 的行为在以下 ASP.NET 功能方面与 ASMX 相同:
在 ASP.NET 兼容模式中运行的 HttpContext: WCF 服务可以访问 Current 以及与其关联的状态。
基于文件的授权:在 ASP.NET 兼容模式中运行的 WCF 服务可以通过将文件系统访问控制列表 (ACL) 附加到服务的 .svc 文件来获得保护。
可配置的 URL 授权:当 WCF 服务在 ASP.NET 兼容模式中运行时,将对 WCF 请求强制执行 ASP.NET 的 URL 授权规则。
HttpModuleCollection 扩展性:由于在 ASP.NET 兼容模式中运行的 WCF 服务完全参与 ASP.NET HTTP 请求生命周期,因此在 HTTP 管道中配置的任何 HTTP 模块能够在服务调用前后的 WCF 请求上进行操作。
ASP.NET 模拟:WCF 服务使用 ASP.NET 模拟线程的当前标识来运行,如果已为应用程序启用 ASP.NET 模拟,则该标识可能与 IIS 进程标识不同。 如果为某个特定服务操作同时启用 ASP.NET 模拟和 WCF 模拟,则服务模拟最终使用从 WCF 获得的标识来运行。
可通过下面的配置(位于应用程序的 Web.config 文件中)在应用程序级别上启用 WCF 的 ASP.NET 兼容模式:
system.serviceModel serviceHostingEnvironment aspNetCompatibilityEnabled="true" / /system.serviceModel
如果没有指定,则此值默认为“true”。 若将此值设置为“false”,则指示在应用程序中运行的所有 WCF 服务将不在 ASP.NET 兼容模式中运行。
由于 ASP.NET 兼容模式暗含的请求处理语义与 WCF 默认值完全不同,因此单独的服务实现能够控制其是否在已启用 ASP.NET 兼容模式的应用程序内运行。 服务可以使用 AspNetCompatibilityRequirementsAttribute 来指示其是否支持 ASP.NET 兼容模式。 此特性的默认值为 Allowed。
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class CalculatorService : ICalculatorSession
{//Implement calculator service methods.}
下表演示应用程序范围的兼容模式设置如何与单独服务指定的支持级别交互:
ASP.NET Core on K8S深入学习(6)Health Check 本文探索了K8S中的默认健康检查机制以及Liveness和Readiness两种各有特点的探测机制,并通过一些小例子进行了说明。不过由于笔者也是初学,对于这一块没有过多实践经验,因此也是讲的比较粗浅,也希望以后能够有更多的实际经验分享与各位。
ASP.NET Core on K8S深入学习(4)你必须知道的Service 本文介绍了K8S中Service的基本概念及常用类型,然后通过一个具体的例子演示了如何创建Service和使用NodePort的方式对外提供访问,最后介绍了如何通过DNS的方式访问Service从而实现服务发现的效果。当然,笔者也是初学,很多东西没有介绍到,也请大家多多参考其他资料更加深入了解。
如何在ASP.NET Core中使用Azure Service Bus Queue 如何在ASP.NET Core中使用Azure Service Bus Queue原文:USING AZURE SERVICE BUS QUEUES WITH ASP.NET CORE SERVICES作者:damienbod译文:如何在ASP.
WCF The service cannot be activated because it does not support ASP.NET compatibility 测试发布到虚拟目录中时发生的报错现象,由于不支持asp.net兼容性而导致服务无法激活启用。 具体错误信息如下: Server Error in /Service2 Application. -------------------------------------------------------------------------------- The service canno
相关文章
- Mac录屏软件:Record It[通俗易懂]
- 【Groovy】闭包 Closure ( 闭包调用 | 闭包默认参数 it | 代码示例 )
- ORA-01081: cannot start already-running ORACLE – shut it down first ORACLE 报错 故障修复 远程处理
- 【IT之家评测室】萤石智能家居摄像机 BC2 上手:小机身设计,全无线体验
- 数智慧,基于人工智能技术的IT智能运维平台
- 【IT之家学院】改善视障用户的网页体验——替代文本的那些事儿
- 看Esri如何论地理大数据的IT观
- 使用 WCF 和 Oracle 搭建企业数据服务的实现(wcf oracle)
- 领军IT巨头:Oracle总裁驾临,展现企业数字化之路(oracle总裁)
- Oracle从1961年对IT领域带来的改变(oracle-1961)
- IT知识库掌握Oracle数据库必备技能(it知识库oracle)
- WCF与Redis的联系挖掘共赢的可能性(wcf和redis的联系)
- Oracle Gho系统最佳IT解决方案(oracle gho系统)
- Oracle APG实现企业IT智能化的卓越平台(oracle apg)
- 挑战Oracle20探索新的IT能力(oracle20题)