asp.net - servicio - wcf service c# example
Error del servicio web WCF: el servicio no se puede activar porque no es compatible con la compatibilidad con ASP.NET (4)
Estoy tratando de crear un servicio web rest wcf. Cuando trato de conectarme al servicio a través del cliente, aparece el siguiente error:
El servicio no se puede activar porque no es compatible con la compatibilidad ASP.NET. La compatibilidad ASP.NET está habilitada para esta aplicación. Desactive el modo de compatibilidad ASP.NET en web.config o agregue el atributo AspNetCompatibilityRequirements al tipo de servicio con la configuración RequirementsMode como ''Allowed'' o ''Required''.
Otros han tenido problemas, pero lo arreglaron mediante cambios en su web.config. Implementé su solución, pero aún así el problema existe. aquí está mi 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>
De hecho, según la última documentación, debes hacer 2 cosas,
1. Para su clase de servicio:
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(Namespace = "url")]
public class Service : IService
{
}
2. Para web.config
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>
En su servicio principal, puede marcar su servicio como:
[AspNetCompatibilityRequirements(
RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
Si alguien tiene una gran cantidad de servicios y servicios creados con ServiceHostFactory
personalizado, entonces AspNetCompatibilityRequirementsAttribute
también se puede establecer en el método CreateServiceHost
.
Ejemplo:
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;
}
}
funcionará :
ha cambiado estas líneas en el código o agrega la línea en web.config:
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="false" multipleSiteBindingsEnabled="true" />
</system.serviceModel>