Interoperabilidad con servicios web ASP.NET

La interoperabilidad entre los servicios web de ASP.NET y los servicio web de Windows Communication Foundation se puede lograr asegurando que los servicios implementados usen ambas tecnologías de acuerdo con la especificación WS-I Basic Profile 1.1. Los servicios web de ASP.NET que cumplen con WS-I Basic Profile 1.1 son interoperables con clientes WCF mediante el uso del enlace proporcionado por el sistema de WCF, BasicHttpBinding.

Utilice la opción de ASP.NET 2.0 de agregar los atributos WebService y WebMethodAttribute a una interfaz en lugar de a una clase y escribir una clase para implementar la interfaz, como se muestra en el siguiente código de ejemplo.

[WebService]  
public interface IEcho  
{  
    [WebMethod]  
    string Echo(string input);  
}  
  
public class Service : IEcho  
{  
  
   public string Echo(string input)  
   {  
        return input;  
    }  
}  

El uso de esta opción es preferible, porque la interfaz con el atributo WebService constituye un contrato para las operaciones realizadas por el servicio, que puede reutilizarse con diferentes clases que podrían implementar ese mismo contrato de distintas maneras.

Evite usar el atributo SoapDocumentServiceAttribute para que los mensajes se enruten a métodos en función del nombre completo del elemento de cuerpo del mensaje SOAP en lugar del encabezado HTTP SOAPAction. WCF usa el encabezado HTTP SOAPAction para enrutar mensajes.

El XML en el que XmlSerializer serializa de forma predeterminada un tipo es semánticamente idéntico al XML en el que DataContractSerializer serializa un tipo, dando por hecho que el espacio de nombres para el XML se define explícitamente. Cuando defina un tipo de datos para su uso con los servicios web de ASP.NET y en previsión de que se adoptará WCF, haga lo siguiente:

  • Defina el tipo mediante las clases de .NET Framework en lugar de mediante el Esquema XML.

  • Agregue solo SerializableAttribute y XmlRootAttribute a la clase, utilizando el último para definir explícitamente el espacio de nombres del tipo. No agregue atributos adicionales del espacio de nombres System.Xml.Serialization para controlar cómo se traducirá la clase de .NET Framework a XML.

  • Mediante el uso de este enfoque, debería ser capaz de convertir más adelante las clases .NET en contratos de datos agregando DataContractAttribute y DataMemberAttribute sin modificar significativamente el XML en el que las clases se serializan para la transmisión. Los tipos utilizados en los mensajes por los servicios web de ASP.NET pueden procesarse como contratos de datos mediante aplicaciones de WCF, lo que proporciona, entre otras ventajas, un mejor rendimiento en las aplicaciones de WCF.

Evite usar las opciones de autenticación proporcionadas por Internet Information Services (IIS). Los clientes de WCF no las admiten. Si es necesario proteger un servicio, utilice las opciones proporcionadas por WCF, porque estas opciones son robustas y se basan en protocolos estándar.

Repercusión en el rendimiento de la carga de ServiceModel HttpModule

En .NET Framework 3.0, se instaló el HttpModule de WCF en el archivo raíz Web.config, de modo que cada aplicación ASP.NET sea compatible con WCF. Esto puede afectar al rendimiento, por lo que es posible quitar ServiceModel del archivo Web.config, como se muestra en el siguiente ejemplo.

<httpModules>  
    <remove name="ServiceModel" />  
</httpModules>

Consulte también