web-dev-qa-db-fra.com

Erreur de service Web WCF: le service ne peut pas être activé car il ne prend pas en charge la compatibilité ASP.NET

J'essaie de créer un service Web wcf reposant. Lorsque j'essaie de me connecter au service via le client, l'erreur suivante apparaît:

Le service ne peut pas être activé car il ne prend pas en charge la compatibilité ASP.NET. La compatibilité ASP.NET est activée pour cette application. Désactivez le mode de compatibilité ASP.NET dans le fichier web.config ou ajoutez l'attribut AspNetCompatibilityRequirements au type de service avec le paramètre RequirementsMode défini sur 'Autorisé' ou 'Requis'.

D'autres ont eu des problèmes, mais ils ont résolu le problème en modifiant leur web.config. J'ai implémenté leur solution, mais le problème existe toujours. voici mon 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>
51
user1186651

Sur votre service principal, vous pouvez marquer votre service comme suit:

[AspNetCompatibilityRequirements(
        RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]

De http://forums.silverlight.net/t/21944.aspx

100
Waqar Janjua

ça va marcher :

vous devez modifier ces lignes dans le code ou ajouter la ligne dans web.config:

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" /> 
</system.serviceModel>
53
Arun joseph

Si quelqu'un a beaucoup de services et que des services sont créés à l'aide de la variable personnalisée ServiceHostFactory, alors AspNetCompatibilityRequirementsAttribute peut également être défini dans la méthode CreateServiceHost.

Exemple:

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;
    }
}
1
Abdul Rauf

En fait, selon la dernière documentation, vous devez faire 2 choses,

1.Pour votre classe de service:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(Namespace = "url")]
public class Service : IService
{
}

2.Pour web.config

<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
0
Sameer