Vorgehensweise: Erstellen eines Ausnahmetyps, der von Remoteobjekten ausgelöst werden kann
Dieses Thema bezieht sich auf eine veraltete Technologie, die zum Zwecke der Abwärtskompatibilität mit vorhandenen Anwendungen beibehalten wird und nicht für die neue Entwicklung empfohlen wird. Verteilte Anwendungen sollten jetzt mit Windows Communication Foundation (WCF) entwickelt werden.
Sie können einen eigenen Ausnahmetyp erstellen, der von einem Remoteobjekt ausgelöst und von einem Remoteaufrufer abgefangen werden kann, indem Sie eine Ableitung von der RemotingException-Klasse vornehmen und die ISerializable-Schnittstelle implementieren.
So erstellen Sie einen Ausnahmetyp, der von Remoteobjekten ausgelöst und von Remotaufrufern abgefangen werden kann
Definieren Sie eine Klasse, die von der RemotingException-Klasse abgeleitet ist.
Public Class RemotableType Inherits MarshalByRefObject Implements ISerializable ' ... End Class 'RemotableType
public class RemotableType : MarshalByRefObject{ // ... }
Fügen Sie das SerializableAttribute-Attribut der Klasse hinzu.
<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 verwendet.
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)); }
Beispiel
Das folgende Codebeispiel stellt eine einfache Implementierung bereit. Falls konfiguriert, wird diese auf den Aufrufer zurückkopiert, wenn sie durch das Remoteserverobjekt ausgelöst wird.
<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
+ "\"";
}
}
}
Siehe auch
Verweis
Konzepte
Remotefähige und nicht remotefähige Objekte
Erstellungsdatum: 2010-02-13