Pourquoi ne AspNetCompatibilityRequirementsMode.Permis de corriger cette erreur?
J'étais à la recherche autour pour essayer de résoudre un problème que j'ai avec WCF. Je suis très nouveau à WCF, alors je ne savais pas exactement ce qui se passait.
Je suis à l'aide de Visual Studio 2010 et n'Nouveau Site Web->Service WCF. J'ai créé mon service et dans le fichier de config, si je l'ai mis aspNetCompatibilityEnabled="true"
, je reçois ce message d'erreur lorsque vous allez pour le service via mon navigateur 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'.
Je ne comprends pas ce que cela signifie. Pourquoi aspNetCompatibilityEnabled="true"
l'origine de cette erreur lorsque [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
il fixe.
Pour moi, ils sonnent comme ils font la même chose. Aussi, sans que l'attribut silverlight n'a pas été en mesure d'appeler mon WCF méthodes. Pourquoi est-ce?
Voici mon fichier de configuration si nécessaire:
<?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>
Donc ma question est, pourquoi ne l'ajout de la Compatibilité de l'attribut résoudre ce problème? Aussi, pourquoi était-il nécessaire pour silverlight pour l'avoir?
Vous devez vous connecter pour publier un commentaire.
Lorsque vous définissez
aspNetCompatibilityEnabled
àtrue
dans votre fichier de configuration, vous déclarez que vos services vont participer à la ASP.NET pipeline; donc des éléments comme ASP.NET session sont disponibles. Vous avez besoin pour décorer vos services de manière appropriée si c'est le cas, depuis ASP.NET le Mode de Compatibilité est à false par défaut.Par la décoration de votre service de la mise en œuvre avec un
RequirementsMode
deAllowed
, vous êtes en indiquant un heureux compromis qui dit en gros que votre service ne se soucie pas de ce que leaspNetCompatibility
mode est (vrai ou faux). Si votreRequirementsMode
estRequired
, alors vous devez avoir la configaspNetCompatibilityEnabled
définie sur true; l'inverse est vrai si votreRequirementsMode
est fixé àNotAllowed
.(Si vous allez avec l'heureuse milieu de terrain de RequirementsMode de Permis, vous pouvez vérifier dans votre service de la mise en œuvre si aspNetCompatibilityEnabled est activé ou non en cochant la statique ServiceHostingEnvironment.AspNetCompatibilityEnabled de la propriété.)
Silverlight doit avoir une dépendance sur la ASP.NET pipeline (je ne suis pas un développeur Silverlight), qui est pourquoi vous avez besoin pour activer ce mode de compatibilité dans votre config et sur vos services dans l'ordre pour être appelés par les applications Silverlight.
Découvrez MSDN de la documentation sur ce ici. La chose à savoir est que si vous n'avez pas besoin ASP.NET pipeline goodies, alors vous n'avez pas besoin pour décorer vos services ou de définir la aspNetCompatibilityEnabled paramètre dans votre config (ils sont désactivés par défaut).
RequirementsMode.Allowed
. Si vous comptez sur ces composants (comme la Session), alors vous devez le régler àRequirementsMode.Required
.