Exportar (0) Imprimir
Expandir todo
Este artículo proviene de un motor de traducción automática. Mueva el puntero sobre las frases del artículo para ver el texto original. Más información.
Traducción
Original
Este tema aún no ha recibido ninguna valoración - Valorar este tema

SoapFormatter (Clase)

Serializa o deserializa un objeto o todo un gráfico de objetos conectados, en formato SOAP.

System.Object
  System.Runtime.Serialization.Formatters.Soap.SoapFormatter

Espacio de nombres:  System.Runtime.Serialization.Formatters.Soap
Ensamblado:  System.Runtime.Serialization.Formatters.Soap (en System.Runtime.Serialization.Formatters.Soap.dll)
public sealed class SoapFormatter : IRemotingFormatter, 
	IFormatter

El tipo SoapFormatter expone los siguientes miembros.

  NombreDescripción
Método públicoSoapFormatter()Inicializa una nueva instancia de la clase SoapFormatter con los valores de propiedad predeterminados.
Método públicoSoapFormatter(ISurrogateSelector, StreamingContext)Inicializa una nueva instancia de la clase SoapFormatter con los valores de ISurrogateSelector y StreamingContext que se hayan especificado.
Arriba
  NombreDescripción
Propiedad públicaAssemblyFormatObtiene o establece el comportamiento del deserializador en lo que respecta a buscar y cargar ensamblados.
Propiedad públicaBinderObtiene o establece el SerializationBinder que controla el enlace entre un objeto serializado y un tipo.
Propiedad públicaContextObtiene o establece el StreamingContext utilizado con este SoapFormatter.
Propiedad públicaFilterLevelObtiene o establece la enumeración TypeFilterLevel de deserialización automática para la comunicación remota de .NET Framework.
Propiedad públicaSurrogateSelectorObtiene o establece el SurrogateSelector que controla la sustitución de tipos durante el proceso de serialización y deserialización.
Propiedad públicaTopObjectObtiene o establece ISoapMessage donde se deserializa el objeto SOAP superior.
Propiedad públicaTypeFormatObtiene o establece el formato en que se distribuyen las descripciones de tipos en la secuencia serializada.
Arriba
  NombreDescripción
Método públicoDeserialize(Stream)Deserializa los datos de la secuencia suministrada y reconstituye el gráfico de objetos.
Método públicoDeserialize(Stream, HeaderHandler)Deserializa la secuencia a un gráfico de objetos; el HeaderHandler especificado se encarga de controlar los encabezados que aparecen en la secuencia.
Método públicoEquals(Object)Determina si el objeto especificado es igual al objeto actual. (Se hereda de Object).
Método públicoGetHashCode Sirve como una función hash para un tipo en particular. (Se hereda de Object).
Método públicoGetType Obtiene el Typede la instancia actual. (Se hereda de Object).
Método públicoSerialize(Stream, Object)Serializa un objeto o gráfico de objetos con el objeto superior (raíz) especificado al Stream indicado.
Método públicoSerialize(Stream, Object, Header[])Serializa un objeto o un gráfico de objetos con la raíz especificada en el Stream especificado en formato RPC (llamada a procedimiento remoto) SOAP.
Método públicoToString Retorna una cadena que representa al objeto actual. (Se hereda de Object).
Arriba
NotaNota

A partir de.NET Framework 2.0, esta clase está obsoleta. Utilice BinaryFormatter en su lugar.

Las clases SoapFormatter y BinaryFormatter implementan la interfaz IRemotingFormatter para que se admitan las llamadas a procedimientos remotos (RPC), y la interfaz IFormatter (heredada por IRemotingFormatter) para que se admita la serialización de un gráfico de objetos. La clase SoapFormatter también admite llamadas RPC con objetos ISoapMessage, sin utilizar la funcionalidad de IRemotingFormatter.

Durante las llamadas RPC, la interfaz IRemotingFormatter permite que se especifiquen dos gráficos de objetos diferentes: el gráfico de objetos que se va a serializar y un gráfico adicional que contiene una matriz de objetos de encabezado que transmiten información sobre la llamada a la función remota (por ejemplo, un identificador de transacción o una firma de método). Para que la serialización sea correcta, el objeto raíz del primer gráfico debe implementar la interfaz IMethodCallMessage o IMethodReturnMessage.

Durante la deserialización de una RPC, se especifica un delegado de HeaderHandler para el método Deserialize del formateador. La infraestructura de comunicación remota utiliza el delegado de HeaderHandler para crear un objeto que admite la interfaz ISerializable. Este objeto contiene la información almacenada en los encabezados y se convierte en la raíz del gráfico devuelto por el deserializador.

SoapFormatter también puede controlar las llamadas RPC generadas con objetos que implementan la interfaz ISoapMessage. Para crear una llamada RPC sin utilizar la funcionalidad de IRemotingFormatter, coloque un objeto que admita la interfaz ISoapMessage en la raíz del gráfico que se va a serializar. Para deserializar una llamada RPC creada de esta forma, la propiedad TopObject debe establecerse en otro objeto que admita la interfaz ISoapMessage y que contenga la información relevante sobre la llamada remota.

Serialización de TimeSpan

Los objetos TimeSpan se serializan según la norma "Alternativa" ISO 8601: 1998 sección 5.5.3.2.1.

Información de versiones

SoapFormatter no admite la compatibilidad de serialización entre distintas versiones de .NET Framework. La serialización entre los tipos de las versiones 1.1 y 2.0 de Framework suele producir errores. Se pueden tomar las medidas siguientes para solucionar este problema:

  • Realizar la conversión para utilizar BinaryFormatter, que proporciona compatibilidad entre las versiones 1.1 y 2.0.

  • Convertir los datos conservados existentes al nuevo formato.

  • Convertir todos los productores y consumidores de datos serializados a la versión 2.0.

  • Evitar el uso de los tipos que han cambiado de la versión 1.1 a la 2.0.


using System;
using System.IO;
using System.Collections;
using System.Runtime.Serialization;

// Note: When building this code, you must reference the
// System.Runtime.Serialization.Formatters.Soap.dll assembly.
using System.Runtime.Serialization.Formatters.Soap;


class App 
{
    [STAThread]
    static void Main() 
    {
        Serialize();
        Deserialize();
    }

    static void Serialize() 
    {
        // Create a hashtable of values that will eventually be serialized.
        Hashtable addresses = new Hashtable();
        addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052");
        addresses.Add("Fred", "987 Pine Road, Phila., PA 19116");
        addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301");

        // To serialize the hashtable (and its key/value pairs), 
        // you must first open a stream for writing.
        // Use a file stream here.
        FileStream fs = new FileStream("DataFile.soap", FileMode.Create);

        // Construct a SoapFormatter and use it 
        // to serialize the data to the stream.
        SoapFormatter formatter = new SoapFormatter();
        try 
        {
            formatter.Serialize(fs, addresses);
        }
        catch (SerializationException e) 
        {
            Console.WriteLine("Failed to serialize. Reason: " + e.Message);
            throw;
        }
        finally 
        {
            fs.Close();
        }
    }


    static void Deserialize() 
    {
        // Declare the hashtable reference.
        Hashtable addresses  = null;

        // Open the file containing the data that you want to deserialize.
        FileStream fs = new FileStream("DataFile.soap", FileMode.Open);
        try 
        {
            SoapFormatter formatter = new SoapFormatter();

            // Deserialize the hashtable from the file and 
            // assign the reference to the local variable.
            addresses = (Hashtable) formatter.Deserialize(fs);
        }
        catch (SerializationException e) 
        {
            Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
            throw;
        }
        finally 
        {
            fs.Close();
        }

        // To prove that the table deserialized correctly, 
        // display the key/value pairs to the console.
        foreach (DictionaryEntry de in addresses) 
        {
            Console.WriteLine("{0} lives at {1}.", de.Key, de.Value);
        }
    }
}


.NET Framework

Compatible con: 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0

.NET Framework Client Profile

Compatible con: 4, 3.5 SP1

Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (no se admite el rol Server Core), Windows Server 2008 R2 (se admite el rol Server Core con SP1 o versiones posteriores; no se admite Itanium)

.NET Framework no admite todas las versiones de todas las plataformas. Para obtener una lista de las versiones compatibles, vea Requisitos de sistema de .NET Framework.
Todos los miembros públicos static (Shared en Visual Basic) de este tipo son seguros para subprocesos. No se garantiza que los miembros de instancias sean seguros para la ejecución de subprocesos.
¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.