Exportar (0) Imprimir
Expandir todo

Aplicaciones web y serialización de Azure

Actualizado: junio de 2014

Al escribir aplicaciones para Azure, la serialización de datos es cada vez más importante en comparación con la escritura de aplicaciones locales. Las aplicaciones de Azure se cargan para el uso de las bases de datos, el almacenamiento general, las transferencias de datos y el almacenamiento en caché. Para obtener más información sobre los precios, vea Información general sobre precios de Azure. Además, las aplicaciones de Azure se pueden usar desde dispositivos móviles como teléfonos, tabletas, etc. y esto puede presentar latencia debido a su naturaleza parcialmente conectada. Todos estos factores significan que es muy importante pensar en cómo la aplicación enviará y recibirá datos. Unas cargas menores reducirán sus costos de ancho de banda y de almacenamiento, y pueden ayudar a reducir la latencia.

WCF incluye 4 serializadores diferentes: DataContractSerializer, XmlSerializer, NetDataContractSerializer y DataContractJsonSerializer. El serializador determina cómo se convierten los objetos de .NET en XML. Una vez serializados, los datos XML se escriben durante la conexión como una serie de bytes. El proceso de tomar contenido XML y convertirlo en un flujo de bytes se denomina codificación. WCF admite las codificaciones siguientes: de texto, binaria y MTOM. La serialización se controla mediante atributos del contrato de servicio. De forma predeterminada se usa DataContractSerializer, que se especifica mediante ServiceContractAttribute. Para usar XmlSerializer, aplique XmlSerializerFormatAttribute al contrato de servicio. DataContractJsonSerializer se usa cuando se aplica WebGetAttribute o WebInvokeAttribute a una operación de servicio. Ambos atributos permiten especificar RequestFormat y ResponseFormat. Para usar JSON para las solicitudes y las respuestas, establézcalos ambos en WebMessageFormat.Json. Para usar JSON debe usar WebHttpBinding, que configura automáticamente WebHttpBehavior. Para obtener más información sobre la serialización de WCF, vea: Serialización y deserialización y Serialización en Windows Communication Foundation. Para obtener más información sobre JSON y WCF, vea Introducción a los servicios RESTful con WCF, Crear servicios WCF habilitados para JSON en .NET 3.5 y Información general sobre REST en WCF.

ImportantImportante
El uso de JSON requiere el uso de WebHttpBinding y WebHttpBehavior, que no admiten la comunicación SOAP. Los servicios que se comunican con WebHttpBinding no admiten exponer metadatos de servicio, por lo que no podrá usar la funcionalidad Agregar referencia de servicio de Visual Studio o la herramienta de línea de comandos svcutil para generar un proxy del lado cliente. Para obtener más información sobre cómo llamar mediante programación a servicios que usan WebHttpBinding, vea Cómo usar servicios REST con WCF.

Open Data Protocol admite actualmente los dos formatos de serialización siguientes:

  • Formato para redifusión Atom (Atom): un formato de intercambio basado en XML usado para las fuentes web.

  • Notación de objetos JavaScript (JSON): un formato de intercambio de datos ligero legible.

En OData, los clientes pueden solicitar el formato de serialización deseado de la respuesta estableciendo el encabezado de mensaje Accept. OData también proporciona la opción de consulta del sistema $format que pueden usar los clientes que no pueden establecer encabezados de solicitudes. WCF Data Services admite los formatos de serialización Atom y JSON, pero no admite la opción de consulta $format. Para admitir la serialización JSON para todos los clientes posibles, debe habilitar la compatibilidad con la opción de consulta $format en la implementación de WCF Data Services. Para obtener más información, vea Instrucciones para OData en Azure.

Normalmente es útil mostrar las diferencias importantes en los tamaños de serialización mostrando las serializaciones del mismo tipo serializadas de manera diferente. A continuación se muestra la definición de un tipo Person de ejemplo:

[DataContract(Namespace="http://example.org/person")]
    public class Person
    {
        public Person() { }
        public Person(string last, string first, string email)
        {
            lastName = last;
            firstName = first;
            emailAddress = email;
        }

        [DataMember]
        public string firstName { get; set; }

        [DataMember]
        public string lastName { get; set; }

        [DataMember]
        public string emailAddress { get; set; }
    }
}           

DataContractSerializer serializó una instancia de Person de la manera siguiente:

<?xml version="1.0"?>
    <Person xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://example.org/person">
    <emailAddress>kim.abercrombie@contoso</emailAddress>
    <firstName>Kim</firstName>
    <lastName>Abercrombie</lastName>
</Person>

XmlSerializer serializó una instancia de Person de la manera siguiente:

<?xml version="1.0"?>
<Person xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <firstName>Kim</firstName>
    <lastName>Abercrombie</lastName>
    <emailAddress>kim.abercrombie@contoso</emailAddress>
</Person>

DataContractJsonSerializer serializó una instancia de Person de la manera siguiente:

{"emailAddress":"kim.abercrombie@contoso","firstName":"Kim","lastName":"Abercrombie"}

Otra área que hay que tener en cuenta es el codificador de mensajes. Los codificadores toman contenido XML y lo convierten en una serie de bytes que se pueden enviar a través de la conexión. Esto puede reducir considerablemente el tamaño de la carga. Los codificadores se configuran en el enlace. Para obtener más información sobre los codificadores, vea Elección de un codificador de mensajes. Los codificadores binarios de Microsoft proporcionarán la menor representación de los datos; sin embargo, solo se pueden usar en escenarios en los que el cliente y el servicio se ejecutan bajo .NET Framework. Si la aplicación necesita interoperabilidad con otras plataformas, use el codificador de texto. También puede implementar su propio codificador personalizados y realizar algún tipo de compresión; para obtener más información, vea Codificador de mensaje personalizado: codificador de compresión.

El mejor serializador y codificador para usar dependerá de la aplicación y de sus necesidades de interoperabilidad. En escenarios donde el servicio y el cliente se ejecutan bajo .NET Framework, puede usar el codificador binario y DataContractSerializer. En escenarios donde se necesite interoperabilidad, use el codificador de texto. En estos tipos de escenarios, DataContractJsonSerializer proporcionará la menor representación, pero requiere el uso de un servicio que no sea SOAP. Si necesita usar SOAP, considere la posibilidad de usar DataContractSerializer.

Mostrar:
© 2014 Microsoft