방법: 원격 개체에서 throw할 수 있는 예외 형식 만들기
이 항목은 이전 버전의 기존 응용 프로그램과의 호환성을 위해 유지되고 있으나 새로운 개발에는 권장되지 않는 레거시 기술에 대해 설명합니다. 분산 응용 프로그램은 이제 WCF(Windows Communication Foundation)를 사용하여 개발됩니다.
RemotingException 클래스에서 파생시키고 ISerializable 인터페이스를 구현하여 원격 개체가 throw하고 원격 호출자가 catch할 수 있는 고유한 예외 형식을 만들 수 있습니다.
원격 개체가 throw하고 원격 호출자가 catch할 수 있는 예외 형식을 만들려면
RemotingException 클래스에서 파생된 클래스를 정의합니다.
Public Class RemotableType Inherits MarshalByRefObject Implements ISerializable ' ... End Class 'RemotableType
public class RemotableType : MarshalByRefObject{ // ... }
클래스에 SerializableAttribute 특성을 둡니다.
<Serializable()> Public Class CustomRemotableException Inherits RemotingException ' ... End Class
[Serializable] public class CustomRemotableException : RemotingException, ISerializable { // ... }
SerializationInfo 개체 및 StreamingContext 개체를 매개 변수로 사용하는 deserialization 생성자를 구현합니다.
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)); }
예제
다음 코드 예제에서는 구성된 경우 원격 서버 개체가 throw할 때 호출자로 다시 복사되는 단순한 구현을 제공합니다.
<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
+ "\"";
}
}
}
참고 항목
참조
개념
빌드 날짜: 2010-02-13