Ich versuche, einen ruhigen wcf-Webservice zu erstellen. Wenn ich versuche, über den Client eine Verbindung zum Dienst herzustellen, wird die folgende Fehlermeldung angezeigt:
Der Dienst kann nicht aktiviert werden, da er keine ASP.NET-Kompatibilität unterstützt. Die ASP.NET-Kompatibilität ist für diese Anwendung aktiviert. Deaktivieren Sie den ASP.NET-Kompatibilitätsmodus in der Datei web.config, oder fügen Sie das Attribut AspNetCompatibilityRequirements zu dem Servicetyp mit der Einstellung RequirementsMode als "Zulässig" oder "Erforderlich" hinzu.
Andere hatten Probleme, die jedoch durch Änderungen an ihrer web.config behoben wurden. Ich habe ihren Fix implementiert, aber das Problem besteht immer noch. hier ist meine web.config:
<system.serviceModel>
<behaviors>
<endpointBehaviors>
<behavior name="WebBehavior" >
<webHttp />
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
<behavior name="">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="myfirstwcf">
<endpoint address="ws" binding="basicHttpBinding"
contract="Imyfirstwcf" />
<endpoint address="ws2" binding="wsHttpBinding"
contract="Imyfirstwcf" />
<endpoint address="" behaviorConfiguration="WebBehavior"
binding="webHttpBinding"
contract="Imyfirstwcf" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<serviceHostingEnvironment aspNetCompatibilityEnabled= "true"
multipleSiteBindingsEnabled="true" />
</system.serviceModel>
In Ihrem Hauptservice können Sie Ihren Service folgendermaßen kennzeichnen:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
es wird klappen :
sie haben diese Codezeile geändert oder die Zeile in web.config eingefügt:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
Wenn für jemanden viele Services erstellt wurden und Services mit der benutzerdefinierten ServiceHostFactory
erstellt werden, kann AspNetCompatibilityRequirementsAttribute
auch in der CreateServiceHost
-Methode festgelegt werden.
Beispiel:
public class HostFactory : ServiceHostFactory
{
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
var Host = new ServiceHost(serviceType, baseAddresses);
//other relevent code to configure Host's end point etc
if (Host.Description.Behaviors.Contains(typeof(AspNetCompatibilityRequirementsAttribute)))
{
var compatibilityRequirementsAttribute = Host.Description.Behaviors[typeof(AspNetCompatibilityRequirementsAttribute)] as AspNetCompatibilityRequirementsAttribute;
compatibilityRequirementsAttribute.RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed;
}
else
{
Host.Description.Behaviors.Add(new AspNetCompatibilityRequirementsAttribute() { RequirementsMode =AspNetCompatibilityRequirementsMode.Allowed});
}
return Host;
}
}
Nach der neuesten Dokumentation müssen Sie zwei Dinge tun,
1.Für Ihre Serviceklasse:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(Namespace = "url")]
public class Service : IService
{
}
2. Für web.config
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>