Stavo cercando in giro cercando di risolvere un problema che sto avendo con WCF. Sono molto nuovo a WCF quindi non ero sicuro di cosa stesse succedendo.Perché AspNetCompatibilityRequirementsMode.Allowed risolve questo errore?
Sto utilizzando Visual Studio 2010 e ho creato Nuovo sito Web-> Servizio WCF. Ho creato il mio servizio e nel file di configurazione, se ho impostato aspNetCompatibilityEnabled="true"
, ricevo questo errore quando accedo al servizio tramite il mio browser 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'.
Non capisco cosa significhi. Perché aspNetCompatibilityEnabled="true"
causa questo errore quando [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
lo corregge.
Per me, suonano come se facessero la stessa cosa. Inoltre, senza quell'attributo silverlight non era in grado di chiamare i miei metodi WCF. Perché?
Ecco il mio file di configurazione, se necessario:
<?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>
Quindi la mia domanda è, perché aggiungendo la compatibilità attributo rimediare? Inoltre, perché era necessario per Silverlight averlo?
Domanda, quale sarebbe questa decorazione appropriata se la impostassi su vero? – Justin
Dipende se il servizio richiede elementi disponibili con la pipeline ASP.NET. Se non ti interessa davvero, lo imposteresti in 'RequirementsMode.Allowed'. Se ti affidi a quei componenti (come Session), dovresti impostarlo su 'RequirementsMode.Required'. –