Share via


Cómo: Crear un tipo de excepción que pueda ser iniciado por objetos remotos

Este tema es específico de una tecnología heredada que se mantiene para la compatibilidad con versiones anteriores con aplicaciones existentes y no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas se deberían desarrollar utilizando  Windows Communication Foundation (WCF).

Puede crear su propio tipo de excepción que se puede iniciar por un objeto remoto y se puede detectar por un llamador remoto al derivar de la clase RemotingException e implementar la interfaz ISerializable.

Cree un tipo de excepción que se pueda iniciar por objetos remotos y detectar por llamadores remotos.

  1. Defina una clase que se derive de la clase RemotingException.

    Public Class RemotableType
       Inherits MarshalByRefObject
          Implements ISerializable
    ' ...
    End Class 'RemotableType
    
    public class RemotableType : MarshalByRefObject{
    // ...
    }
    
  2. Aplique el atributo SerializableAttribute a la clase.

    <Serializable()> Public Class CustomRemotableException
        Inherits RemotingException
        ' ...
    End Class
    
    [Serializable]
    public class CustomRemotableException : RemotingException, ISerializable {
        // ...
    }
    
  3. Implemente un constructor de deserialización que tome los objetos SerializationInfo y StreamingContext como parámetros.

    Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
            _internalMessage = info.GetValue("_internalMessage", GetType(String))
    End Sub
    
    public CustomRemotableException(SerializationInfo info, StreamingContext context) {
          _internalMessage = (string)info.GetValue("_internalMessage", typeof(string));
     }
    

Ejemplo

El siguiente ejemplo de código proporciona una implementación simple que, si se configura, se vuelve a copiar al llamador cuando se inicia el objeto de servidor remoto.

<Serializable()> Public Class CustomRemotableException
    Inherits RemotingException
    Implements ISerializable

    Private _internalMessage As String

    Public Sub New()
        _internalMessage = String.Empty
    End Sub

    Public Sub New(ByVal message As String)
        _internalMessage = message
    End Sub

    Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
        _internalMessage = info.GetValue("_internalMessage", GetType(String))
    End Sub

    Public Overrides Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext)
        info.AddValue("_internalMessage", _internalMessage)
    End Sub

    Public Overrides ReadOnly Property Message() As String
        Get
            Return "This is your custom remotable exception returning : """ + _internalMessage + """"
        End Get
    End Property
End Class
[Serializable]
public class CustomRemotableException : RemotingException, ISerializable
{
    private string _internalMessage;

    public CustomRemotableException()
    {
        _internalMessage = String.Empty;
    }

    public CustomRemotableException(string message)
    {
        _internalMessage = message;
    }

    public CustomRemotableException(SerializationInfo info, StreamingContext context)
    {
        _internalMessage = (string)info.GetValue("_internalMessage", typeof(string));
    }

    public override void GetObjectData(SerializationInfo info, StreamingContext context)
    {
         info.AddValue("_internalMessage", _internalMessage);
    }

     // Returns the exception information. 
     public override string Message
     {
         get
         {
             return "This is your custom remotable exception returning: \""
          + _internalMessage
          + "\"";
         }
     }
}

Vea también

Referencia

ContextBoundObject

Conceptos

Objetos remotos y no remotos

Fecha de compilación: 2010-02-13