Freigeben über


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. 1. Definieren Sie eine von der RemotingException-Klasse abgeleitete Klasse.

    Public Class RemotableType
       Inherits MarshalByRefObject
    End Class 'RemotableType
    
    public class RemotableType : MarshalByRefObject{
    }
    
  2. Platzieren Sie das SerializableAttribute-Attribut in der Klasse.

    <Serializable()> Public Class CustomRemotableException
        Inherits RemotingException
        …
    End Class
    
    [Serializable]
    public class CustomRemotableException : RemotingException, ISerializable {
        …
    }
    
  3. 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

ContextBoundObject

Konzepte

Remotefähige und nicht remotefähige Objekte

Weitere Ressourcen

Nicht remotefähige Objekte