次の方法で共有


方法 : リモート オブジェクトからスローできる例外の種類を作成する

このトピックの対象は、既存のアプリケーションとの下位互換性のために残されているレガシ テクノロジに特定されています。新規の開発には、このトピックを適用しないでください。分散アプリケーションは、現在は Windows Communication Foundation (WCF) を使用して開発する必要があります。

RemotingException クラスから派生させ、ISerializable インターフェイスを実装することによって、リモート オブジェクトからスローし、リモートの呼び出し元でキャッチできる独自の例外の種類を作成できます。

リモート オブジェクトからスローし、リモートの呼び出し元でキャッチできる例外の種類を作成するには

  1. RemotingException クラスから派生するクラスを定義します。

    Public Class RemotableType
       Inherits MarshalByRefObject
          Implements ISerializable
    ' ...
    End Class 'RemotableType
    
    public class RemotableType : MarshalByRefObject{
    // ...
    }
    
  2. クラスに SerializableAttribute 属性を配置します。

    <Serializable()> Public Class CustomRemotableException
        Inherits RemotingException
        ' ...
    End Class
    
    [Serializable]
    public class CustomRemotableException : RemotingException, ISerializable {
        // ...
    }
    
  3. SerializationInfo オブジェクトと StreamingContext オブジェクトをパラメーターとして受け取る逆シリアル化コンストラクターを実装します。

    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));
     }
    

リモート サーバー オブジェクトからスローされたときに、構成されていれば呼び出し元にコピーされる簡単な実装のコード例を次に示します。

<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
          + "\"";
         }
     }
}

参照

リファレンス

ContextBoundObject

概念

リモート処理可能オブジェクトとリモート処理不可能オブジェクト

ビルド日:2010-02-13