2011-04-26 15 views
7

Estoy intentando escribir algunas pruebas unitarias que prueban los puntos finales para mi servicio WCF y para hacer esto deseo alojar el servicio dentro de las pruebas de la unidad en vez de en IIS. He encontrado this article que he leído y hecho los cambios, así que lo estoy hospedando usando ServiceHost y puedo ver que las pruebas unitarias están intentando ejecutarlo, pero parece que estoy teniendo un problema.Hosting Servicio WCF en Prueba unitaria usando ServiceHost

Cuando ejecuto las pruebas, me sale el siguiente error en el punto de abrir el servicio:

Este servicio requiere ASP.NET compatibilidad y debe estar alojado en IIS. De cualquier alojar el servicio en IIS con la compatibilidad de ASP.NET encendido en web.config o establecer la propiedad AspNetCompatibilityRequirementsAttribute.AspNetCompatibilityRequirementsMode a un valor distinto de requeridos.

Esto es causado por el atributo siguiente configuración en mi clase de servicios:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

entonces he tratado de añadir el siguiente en mi app.config pero no parece hacer ninguna diferencia :

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

¿Alguna idea de cómo puedo superar este problema?

+1

que es fácil arreglar: solo eliminar e el requisito de compatibilidad ASP.NET. No, en serio: deberías. –

+0

Al final lo hice, simplemente eliminé el atributo. Estaba preocupado de que no supiera la razón exacta por la que estaba allí en primer lugar, pero supongo que es por eso que tenemos pruebas unitarias, CI y compilaciones nocturnas. :) – Penfold

+0

Lo necesitarías de nuevo cuando empieces a perder el 'HttpContext';) ¡Entonces, por supuesto, el autohosting se sale de la ventana! –

Respuesta

10

Como indica el mensaje de error, , el modo de compatibilidad ASP.NET requiere que el servicio WCF se aloje en un servidor web ASP.NET.

Si desea ejecutar algunas pruebas de integración en contra de su servicio WCF en el equipo local siempre se puede alojar el servicio en el servidor de desarrollo de Visual Studio (también conocido como Cassini ). Le recomiendo que consulte CassiniDev, una biblioteca de código abierto que permite ejecutar un servidor web ASP.NET liviano en el proceso, que es especialmente útil para escenarios de pruebas unitarias.

Aquí hay un ejemplo de como se puede utilizar CassiniDev en una unidad de prueba usando MSTest:

[TestClass] 
public class MyServiceTest 
{ 
    private CassiniDevServer host; 

    [TestInitialize] 
    public void SetUp() 
    { 
     var host = new CassiniDevServer(); 
     host.StartServer(@"RelativePathToServiceProjectDir", 8080, "/", "localhost"); 
    } 

    [TestCleanup] 
    public void TearDown() 
    { 
     host.StopServer(); 
    } 
} 

recursos relacionados:

+0

Gracias por el puntero a CassiniDev, ¡es genial! Traté de integrarlo y funcionó perfectamente cuando se ejecutaba en mi máquina, pero tuve problemas para ejecutarlo en TeamCity para la construcción de CI ...así que terminé de optar por eliminar el atributo. – Penfold

+0

A veces menos es más :) –

+0

¿Cómo harías para cambiar el archivo web.config del proyecto bajo prueba para apuntar a la base de datos de prueba y esas cosas? –

Cuestiones relacionadas