ASP.Net WCF: The service cannot be activated because it does not support ASP.NET compatibility

Estuve dando vueltas con este error desde ayer y fue algo que, ciertamente, me hizo perder mucho tiempo.

El error surge por una falta de conocimiento en la forma en que trabaja WCF y ASP.NET cuando corren dentro del mismo sitio.

WCF y ASP.NET puede correr side-by-side pero se debe habilitar el modo de compatibilidad. Si no se hace, va a aparecer el mensaje de error del título:

The service cannot be activated because it does not support ASP.NET compatibility

Ahí se nos invitará a modificar la propiedad aspNetCompatibilityEnabled a false. Pero esto no resuelve las cosas totalmente porque habrá cosas en nuestro servicio WCF que no funcionarán como esperamos.

El problema que estaba teniendo yo al hacer esto es que HttpContext.Current me estaba devolviendo siempre null en mi servidor de pruebas (IIS Express). En el servidor de producción (AWS) funcionaba bien.

El problema aquí es que el servicio no se estaba activando bien. Para esto hay que seguir los siguientes pasos:

1. En primer lugar, la propiedad aspNetCompatibilityEnabled tiene que estar en true en el web.config:

<serviceHostingEnvironment multipleSiteBindingsEnabled="true" aspNetCompatibilityEnabled="true" />

2. En segundo lugar, hay que importar el siguiente namespace:

using System.ServiceModel.Activation;

3. Y, por último, hay que decorar la clase de nuestro servicio de la siguiente manera:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
public class Service : IService

De esta forma podremos acceder a HttpContext.Current sin problemas.

Para más información sobre este tema, recomiendo este post de Microsoft: WCF Services and ASP.NET.

Author: Marcelo Ruiz

Marcelo has been working as a software developer for more than 15 years. He has participated in projects for companies in USA, Mexico, Argentina, Europe and Africa. He is skilled with Microsoft technologies such as ASP.NET, MVC, C#, WCF and SQL Server, among others.

Leave a Reply

Your email address will not be published. Required fields are marked *