Estaba buscando intentando resolver un problema que estoy teniendo con WCF. Soy muy nuevo en WCF, así que no estaba seguro de qué estaba pasando exactamente.¿Por qué AspNetCompatibilityRequirementsMode.Allowed soluciona este error?
Estoy usando Visual Studio 2010 e hice un nuevo sitio web-> WCF Service. Creé mi servicio y en el archivo de configuración, si configuré aspNetCompatibilityEnabled="true"
, obtendría este error cuando vaya al servicio a través de mi navegador 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'.
No entiendo lo que esto significa. Por qué aspNetCompatibilityEnabled="true"
causa este error cuando [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
lo arregla.
Para mí, suenan como si hicieran lo mismo. Además, sin ese atributo, Silverlight no pudo llamar a mis métodos WCF. ¿Porqué es eso?
Aquí está mi archivo de configuración si es necesario:
<?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>
Así que mi pregunta es, ¿por qué la adición de la compatibilidad atribuyen arreglar eso? Además, ¿por qué era necesario que Silverlight lo tuviera?
Pregunta, ¿cuál sería esta decoración adecuada si la configuro como verdadera? – Justin
Depende de si su servicio necesita elementos disponibles con la interconexión ASP.NET. Si realmente no te importa, entonces debes configurarlo en 'RequirementsMode.Allowed'. Si confía en esos componentes (como Session), entonces debe configurarlo en 'RequirementsMode.Required'. –