Warum behebt AspNetCompatibilityRequirementsMode.Allowed diesen Fehler?
War ich auf der Suche um zu versuchen ein problem zu lösen, ich habe mit WCF. Ich bin ganz neu WCF so war ich nicht sicher, was genau Los war.
Ich benutze Visual Studio 2010 und haben Neue Web-Site->WCF-Dienst. Ich meine service und in der config-Datei, wenn ich aspNetCompatibilityEnabled="true"
würde ich bekomme diese Fehlermeldung, wenn man auf den Dienst über meine web-browser.
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'.
Ich verstehe nicht, was das bedeutet. Warum aspNetCompatibilityEnabled="true"
diesen Fehler verursachen, wenn [AspNetCompatibilityRequirements(RequirementsMode=AspNetCompatibilityRequirementsMode.Allowed)]
behebt es.
Mir, Sie klingen wie Sie das gleiche tun. Auch ohne das Attribut silverlight war nicht in der Lage, um meine WCF-Methoden. Warum ist das so?
Hier ist meine config Datei (falls erforderlich):
<?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>
Also meine Frage ist, warum das hinzufügen der Kompatibilität Attribut beheben? Auch, warum war es notwendig für silverlight zu haben?
InformationsquelleAutor der Frage Justin | 2012-03-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
aspNetCompatibilityEnabled
zutrue
in deiner config-Datei, Sie besagt, dass Sie Ihre Dienstleistungen an der ASP.NET pipeline; so Elemente wie ASP.NET Sitzung verfügbar sind. Sie müssen dekorieren Sie Ihre Dienste entsprechend wenn dies der Fall ist, da ASP.NET der Kompatibilitätsmodus ist standardmäßig auf false festgelegt.Also durch die Dekoration Ihres service-Implementierung mit einem
RequirementsMode
vonAllowed
, sind Sie unter Angabe einer glücklichen Mittelweg, der im Grunde sagt Ihr Dienst kümmert sich nicht, was dieaspNetCompatibility
- Modus ist (true oder false). Wenn IhrRequirementsMode
istRequired
, dann müssen Sie die configaspNetCompatibilityEnabled
auf true gesetzt; das Gegenteil ist wahr, wenn IhreRequirementsMode
eingestellt istNotAllowed
.(Wenn Sie gehen mit der glücklichen Mittelweg der RequirementsMode der Erlaubt, können Sie in Ihrem service-Implementierung, wenn aspNetCompatibilityEnabled aktiviert ist oder nicht, indem Sie die statische ServiceHostingEnvironment.AspNetCompatibilityEnabled Eigenschaft.)
Silverlight muss eine Abhängigkeit der ASP.NET pipeline (ich bin kein Silverlight-Entwickler), das ist, warum Sie benötigen, um diese Kompatibilität-Modus in der config und auf Ihre Dienste, um für Sie zu genannt werden, die durch Silverlight-apps.
Check-out MSDN-Dokumentation zu diesem hier. Die Sache zu wissen ist, dass, wenn Sie nicht brauchen ASP.NET pipeline-goodies, dann brauchen Sie nicht, dekorieren Sie Ihre Dienstleistungen oder setzen Sie die aspNetCompatibilityEnabled-Einstellung in der config (Sie sind standardmäßig deaktiviert).
InformationsquelleAutor der Antwort David Hoerster