Gewusst wie: Erstellen eines Ausnahmetyps, der von Remoteobjekten ausgelöst werden kann
Sie können Ihren eigenen Ausnahmetyp erstellen, der von einem Remoteobjekt ausgelöst und von einem Remoteaufrufer abgefangen werden kann, indem Sie von der RemotingException-Klasse ableiten und die ISerializable-Schnittstelle implementieren.
So erstellen Sie einen Ausnahmetyp, der von Remoteobjekten ausgelöst und von Remoteaufrufern abgefangen werden kann
1. Definieren Sie eine von der RemotingException-Klasse abgeleitete Klasse.
Public Class RemotableType Inherits MarshalByRefObject End Class 'RemotableType
public class RemotableType : MarshalByRefObject{ }
Platzieren Sie das SerializableAttribute-Attribut in der Klasse.
<Serializable()> Public Class CustomRemotableException Inherits RemotingException … End Class
[Serializable] public class CustomRemotableException : RemotingException, ISerializable { … }
Implementieren Sie einen Deserialisierungskonstruktor, der ein SerializationInfo-Objekt und ein StreamingContext-Objekt als Parameter annimmt.
Beispiel
Das folgende Codebeispiel enthält eine einfache Implementierung, die bei ordnungsgemäßer Konfiguration zurück zum Aufrufer kopiert wird, wenn sie vom Remoteserverobjekt ausgelöst wird.
<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
+ "\"";
}
}
}
Siehe auch
Referenz
Konzepte
Remotefähige und nicht remotefähige Objekte