AspNetCompatibilityRequirementsMode.Allowed为什么修复此错误

本文关键字:错误 Allowed 为什么 AspNetCompatibilityRequirementsMode | 更新日期: 2023-09-27 18:28:38

我四处寻找,试图解决WCF的一个问题。我是WCF的新手,所以我不确定到底发生了什么。

我使用的是Visual Studio 2010,并做了"新建网站"->"WCF服务"。我创建了我的服务,在配置文件中,如果我设置了aspNetCompatibilityEnabled="true",当我通过web浏览器访问该服务时,我会收到这个错误。

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'.

我不明白这意味着什么。[AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]修复时,为什么aspNetCompatibilityEnabled="true"会导致此错误。

对我来说,他们听起来像是在做同样的事情。此外,如果没有该属性,silverlight就无法调用我的WCF方法。为什么?

如果需要,这里是我的配置文件:

<?xml version="1.0"?>
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.0" />
    <customErrors mode="Off"/>
  </system.web>
  <system.serviceModel>
    <bindings>
      <basicHttpBinding>
        <binding name="LargeBuffer" maxBufferSize="2147483647" maxReceivedMessageSize="2147483647" />
      </basicHttpBinding>
    </bindings>
    <services>
      <service name="Services.Exporter">
        <endpoint address="" binding="basicHttpBinding" bindingConfiguration="LargeBuffer"
          contract="Services.IExporter" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <serviceMetadata httpGetEnabled="true"/>
          <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment
      multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />
  </system.serviceModel>
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
</configuration>

所以我的问题是,为什么添加兼容性属性可以解决这个问题?还有,为什么银光灯有必要拥有它?

AspNetCompatibilityRequirementsMode.Allowed为什么修复此错误

在配置文件中将aspNetCompatibilityEnabled设置为true时,表示您的服务将参与ASP.NET管道;因此像ASP.NET会话这样的项目是可用的。如果是这种情况,您需要适当地装饰您的服务,因为ASP.NET兼容性模式默认设置为false。

因此,通过用AllowedRequirementsMode来装饰您的服务实现,您声明了一个愉快的中间立场,即基本上说您的服务不在乎aspNetCompatibility模式是什么(是真是假)。如果您的RequirementsModeRequired,那么您需要将配置aspNetCompatibilityEnabled设置为true;如果您的CCD_ 12设置为CCD_。

(如果你选择RequirementsMode of Allowed这一令人满意的中间立场,你可以通过检查静态ServiceHostingEnvironment.aspNetCompatibilityEnabled属性来检查你的服务实现中是否启用了aspNetCompatibility enabled。)

Silverlight必须依赖ASP.NET管道(我不是Silverlight开发人员),这就是为什么您需要在配置和服务中启用此兼容性模式,以便Silverlight应用程序调用它们。

请在此处查看MSDN的文档。需要知道的是,如果你不需要ASP.NET管道的好东西,那么你就不需要装饰你的服务,也不需要在配置中设置aspNetCompatibilityEnabled设置(默认情况下它们是关闭的)。