Una vez más, sigo por aquí con VS2008 y con WCF, en esta ocasión trataré de comentar, como hostear en IIS un WCF basado en un binding “Http Basic Authentication” y conseguir hacer uso de nuestra conocida clase HttpContext. Son unos cuantos pasos muy fáciles y básicos, jejeje.. ¡claro, ahora que los conozco!

Los pasos a seguir para conseguir el objetivo de este post son:

  1. Crear un proyecto Web de tipo “WCF Service Application”.

  • La plantilla nos creará un proyecto con un Interfaz (Servicio) y una clase de datos (contrato), además un servicio, lo que es nuestro Web Service que ha de implementar obligatoriamente la Interfaz.
  • Seguidamente modificamos el Web.config del servicio manualmente o con nuestro maravilloso editor (Windows Communication Foundation (WCF) – BUG 1) estableciendo principalmente la configuración tal y como muestro aquí un par de pantallazos:

 

  • A continuación tenemos dos opciones para trabajar con la compatibilidad  ASP NET:
    • Anadir el attributo “AspNetCompatibilityRequirements([AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Allowed)]) al servicio, Service1 tal y como se muestra a continuación. Aprovechamos para establecer el Namespace,😀, ¡ya sabéis “best practices”! (tempuri.org con WCF).
1 [ServiceBehavior(Namespace="http://elGuerre.loc/Service1/")] 2 [AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Allowed)] 3 public class Service1 : IService1 4 { 5 public string GetData(int value) 6 { 7 return string.Format("You entered: {0}", value); 8 } 9 10 public CompositeType GetDataUsingDataContract(CompositeType composite) 11 { 12 if (composite.BoolValue) 13 { 14 composite.StringValue += "Suffix"; 15 } 16 return composite; 17 }
    • y, añadir la siguiente línea en el web.config.
1 <system.serviceModel> 2 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" /> 3 ...

O,

    • Añadir el atributo “AspNetCompatibilityRequirements” ([AspNetCompatibilityRequirements(RequirementsMode= AspNetCompatibilityRequirementsMode.Required)] y,
    • no incluir la configuración en el web.config.
  • Publicar el servicio (“Publish”).
  • Modificar las propiedades del sitio Web en IIS:
    1. Quitar autenticación anónima
    2. Activar autenticación básica (dejar activa solamente esta casilla).

Ahora tenemos la compatibilidad con ASP.NET  pero con la potencia de WCF, nuestra clase HttpContext (session, cookies, cache, etc) está lista para ser usada.

Si estáis interesados en esto, aquí os dejo unas cuantas referencias:

 

Saludos @3Cantos
Juanlu