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>
Sur votre service principal, vous pouvez marquer votre service comme suit:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
ç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>
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;
}
}
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"/>