Partager via


Comment : Créer un type d'exception pouvant être levée par des objets distants

Vous pouvez créer votre propre type d'exception pouvant être levée par un objet distant et interceptée par un appelant distant par une dérivation à partir de la classe RemotingException et en implémentant l'interface ISerializable.

Pour créer un type d'exception pouvant être levée par des objets distants et interceptée par des appelants distants

  1. 1. Définissez une classe qui dérive de la classe RemotingException.

    Public Class RemotableType
       Inherits MarshalByRefObject
    End Class 'RemotableType
    
    public class RemotableType : MarshalByRefObject{
    }
    
  2. Placez l'attribut SerializableAttribute sur la classe.

    <Serializable()> Public Class CustomRemotableException
        Inherits RemotingException
        …
    End Class
    
    [Serializable]
    public class CustomRemotableException : RemotingException, ISerializable {
        …
    }
    
  3. Implémentez un constructeur de désérialisation qui prend des objets SerializationInfo et StreamingContext comme paramètres.

Exemple

L'exemple de code suivant illustre une implémentation simple qui, une fois configurée, est de nouveau copiée vers l'appelant lorsqu'elle est levée par l'objet serveur distant.

<Serializable()> Public Class CustomRemotableException
  Inherits RemotingException
  Private _internalMessage As String
  Public Sub CustomRemotableException()
      _internalMessage = String.Empty
  End Sub

  Public Sub CustomRemotableException(ByVal message As String)
      _internalMessage = message
  End Sub
  Public Sub CustomRemotableException(ByVal info As _
      SerializationInfo, ByVal context As StreamingContext)
      _internalMessage = info.GetValue("_internalMessage", _
                                  _internalMessage.GetType())
  End Sub
  Public Overrides Sub GetObjectData(ByVal info As SerializationInfo, _
                                   ByVal context As StreamingContext)
       info.AddValue("_internalMessage", _internalMessage)
  End Sub
  Public Shadows 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 
      + "\"";
      }
   }
}

Voir aussi

Référence

ContextBoundObject

Concepts

Objets accessibles à distance et objets non accessibles à distance

Autres ressources

Objets non accessibles à distance