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. Définissez une classe qui dérive de la classe RemotingException.
Public Class RemotableType Inherits MarshalByRefObject End Class 'RemotableType
public class RemotableType : MarshalByRefObject{ }
Placez l'attribut SerializableAttribute sur la classe.
<Serializable()> Public Class CustomRemotableException Inherits RemotingException … End Class
[Serializable] public class CustomRemotableException : RemotingException, ISerializable { … }
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
Concepts
Objets accessibles à distance et objets non accessibles à distance