이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문

MarshalByRefObject 클래스

 

게시 날짜: 2016년 11월

원격 통신을 지원하는 응용 프로그램에서 응용 프로그램 도메인 경계를 넘어 개체에 액세스할 수 있습니다.

네임스페이스:   System
어셈블리:  mscorlib(mscorlib.dll에 있음)

System.Object
  System.MarshalByRefObject
    Microsoft.Build.Utilities.AppDomainIsolatedTask
    Microsoft.Build.Utilities.TaskItem
    Microsoft.Build.Utilities.TaskLoggingHelper
    Microsoft.Win32.RegistryKey
    System.AddIn.Pipeline.ContractBase
    System.AppDomain
    System.AppDomainManager
    System.ComponentModel.Component
    System.ContextBoundObject
    System.Data.Common.DataColumnMapping
    System.Data.Common.DataColumnMappingCollection
    System.Data.Common.DataTableMapping
    System.Data.Common.DataTableMappingCollection
    System.Data.Common.DbDataReader
    System.Data.Common.DbParameter
    System.Data.Common.DbParameterCollection
    System.Data.Common.DbTransaction
    System.Diagnostics.TraceListener
    System.DirectoryServices.SearchResultCollection
    System.Drawing.Brush
    System.Drawing.Drawing2D.CustomLineCap
    System.Drawing.Drawing2D.GraphicsContainer
    System.Drawing.Drawing2D.GraphicsPath
    System.Drawing.Drawing2D.GraphicsPathIterator
    System.Drawing.Drawing2D.GraphicsState
    System.Drawing.Drawing2D.Matrix
    System.Drawing.Font
    System.Drawing.FontFamily
    System.Drawing.Graphics
    System.Drawing.Icon
    System.Drawing.Image
    System.Drawing.Pen
    System.Drawing.Region
    System.Drawing.StringFormat
    System.EnterpriseServices.Internal.AssemblyLocator
    System.EnterpriseServices.RegistrationHelper
    System.IO.FileSystemInfo
    System.IO.IsolatedStorage.IsolatedStorage
    System.IO.Stream
    System.IO.TextReader
    System.IO.TextWriter
    System.Messaging.MessageEnumerator
    System.Messaging.MessageQueueEnumerator
    System.Net.WebRequest
    System.Net.WebResponse
    System.Reflection.AssemblyNameProxy
    System.Runtime.InteropServices.StandardOleMarshalObject
    System.Runtime.Remoting.Lifetime.ClientSponsor
    System.Runtime.Remoting.ObjectHandle
    System.Speech.Recognition.SrgsGrammar.SrgsElement
    System.Threading.RegisteredWaitHandle
    System.Threading.Timer
    System.Threading.WaitHandle
    System.Web.Compilation.ClientBuildManager
    System.Web.Compilation.ClientBuildManagerCallback
    System.Web.Hosting.AppDomainProtocolHandler
    System.Web.Hosting.ApplicationManager
    System.Web.Hosting.HostingEnvironment
    System.Web.Hosting.ISAPIRuntime
    System.Web.Hosting.ProcessHost
    System.Web.Hosting.ProcessHostFactoryHelper
    System.Web.Hosting.ProcessProtocolHandler
    System.Web.Hosting.RecycleLimitMonitor
    System.Web.Hosting.RecycleLimitMonitor.RecycleLimitMonitorSingleton
    System.Web.Hosting.VirtualFileBase
    System.Web.Hosting.VirtualPathProvider
    System.Windows.Forms.BaseCollection
    System.Windows.Forms.NativeWindow
    System.Windows.Forms.NumericUpDownAccelerationCollection
    System.Windows.Forms.OwnerDrawPropertyBag
    System.Windows.Forms.TreeNode
    System.Windows.Interop.DocObjHost
    System.Workflow.Runtime.DebugEngine.DebugController

[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class MarshalByRefObject

이름설명
System_CAPS_protmethodMarshalByRefObject()

MarshalByRefObject 클래스의 새 인스턴스를 초기화합니다.

이름설명
System_CAPS_pubmethodCreateObjRef(Type)

원격 개체와 통신 하는 데 프록시를 생성 하는 데 필요한 모든 관련 정보를 포함 하는 개체를 만듭니다.

System_CAPS_pubmethodEquals(Object)

지정한 개체와 현재 개체가 같은지 여부를 확인합니다.(Object에서 상속됨)

System_CAPS_protmethodFinalize()

가비지 컬렉션이 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetHashCode()

기본 해시 함수로 작동합니다.(Object에서 상속됨)

System_CAPS_pubmethodGetLifetimeService()

이 인스턴스에 대 한 수명 정책을 제어 하는 수명이 현재 서비스 개체를 검색 합니다.

System_CAPS_pubmethodGetType()

현재 인스턴스의 Type을 가져옵니다.(Object에서 상속됨)

System_CAPS_pubmethodInitializeLifetimeService()

이 인스턴스의 수명 정책을 제어하는 수명 서비스 개체를 가져옵니다.

System_CAPS_protmethodMemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.(Object에서 상속됨)

System_CAPS_protmethodMemberwiseClone(Boolean)

현재의 단순 복사본을 만듭니다 MarshalByRefObject 개체입니다.

System_CAPS_pubmethodToString()

현재 개체를 나타내는 문자열을 반환합니다.(Object에서 상속됨)

응용 프로그램 도메인은 하나 이상의 응용 프로그램이 있는 운영 체제 프로세스의 파티션입니다. 동일한 응용 프로그램 도메인의 개체는 직접 통신 합니다. 다른 응용 프로그램 도메인의 개체에는 응용 프로그램 도메인 경계를 넘어 개체의 복사본을 전송 하거나 메시지를 교환 하는 프록시를 사용 하 여 통신 합니다.

MarshalByRefObject프록시를 사용 하는 메시지를 교환 하 여 응용 프로그램 도메인 경계에 걸쳐 통신 하는 개체에 대 한 기본 클래스입니다. 개체에서 상속 되지 않는 MarshalByRefObject 으로 암시적으로 값 마샬링됩니다. 마샬링을 값 개체에서 참조 하는 원격 응용 프로그램, 응용 프로그램 도메인 경계를 넘어 개체의 복사본이 전달 됩니다.

MarshalByRefObject개체는 로컬 응용 프로그램 도메인의 경계 내에서 직접 액세스 합니다. 원격에서 응용 프로그램 처음으로 응용 프로그램 도메인에 액세스 한 MarshalByRefObject, 프록시 원격 응용 프로그램에 전달 됩니다. 프록시에 대 한 후속 호출 로컬 응용 프로그램 도메인에 있는 개체로 다시 마샬링됩니다.

형식에서 상속 해야 MarshalByRefObject 때 응용 프로그램 도메인 경계를 넘어 형식을 사용 하 고 개체의 상태 개체의 멤버가 자신이 만들어진 응용 프로그램 도메인 외부에서 사용할 수 없기 때문에 복사 하면 안 됩니다.

개체를 파생 시키는 경우 MarshalByRefObject 응용 프로그램 도메인 경계를 넘어 용도로 하지 재정의 해야 해당 멤버가 나 해야 하는 메서드를 직접 호출 합니다. 파생 된 클래스는 런타임에서 인식 MarshalByRefObject 응용 프로그램 도메인 경계를 넘어 마샬링해야 합니다.

이 섹션에는 두 가지 코드 예제가 포함 되어 있습니다. 첫 번째 코드 예제에는 다른 응용 프로그램 도메인 클래스의 인스턴스를 만드는 방법을 보여 줍니다. 두 번째 코드 예제에서는 원격 서비스에 사용할 수 있는 간단한 클래스를 보여 줍니다.

예제 1

다음 코드 예제에서는 다른 응용 프로그램 도메인에 있는 코드를 실행 하는 가장 간단한 방법은 보여 줍니다. 이 예제에서는 클래스를 정의 Worker 상속 하 MarshalByRefObject, 실행 되는 응용 프로그램 도메인의 이름을 표시 하는 메서드로 합니다. 인스턴스를 만듭니다 Worker 기본 응용 프로그램 도메인에 새 응용 프로그램 도메인입니다.

System_CAPS_note참고

포함 된 어셈블리 Worker 두 응용 프로그램 도메인에 로드 해야 하지만 새 응용 프로그램 도메인에만 있는 다른 어셈블리를 로드할 수 있습니다.

using System;
using System.Reflection;

public class Worker : MarshalByRefObject
{
    public void PrintDomain() 
    { 
        Console.WriteLine("Object is executing in AppDomain \"{0}\"",
            AppDomain.CurrentDomain.FriendlyName); 
    }
}

class Example
{
    public static void Main()
    {
        // Create an ordinary instance in the current AppDomain
        Worker localWorker = new Worker();
        localWorker.PrintDomain();

        // Create a new application domain, create an instance
        // of Worker in the application domain, and execute code
        // there.
        AppDomain ad = AppDomain.CreateDomain("New domain");
        Worker remoteWorker = (Worker) ad.CreateInstanceAndUnwrap(
            typeof(Worker).Assembly.FullName,
            "Worker");
        remoteWorker.PrintDomain();
    }
}

/* This code produces output similar to the following:

Object is executing in AppDomain "source.exe"
Object is executing in AppDomain "New domain"
 */

예제 2

다음 예제에서 파생 된 클래스에 설명 MarshalByRefObject 즉 나중에 사용 되는 원격 서비스입니다.

using System;
using System.Runtime.Remoting;
using System.Security.Permissions;

public class SetObjectUriForMarshalTest  {

    class TestClass : MarshalByRefObject {
    }

    [SecurityPermission(SecurityAction.Demand, Flags=SecurityPermissionFlag.RemotingConfiguration)] 
    public static void Main()  {

        TestClass obj = new TestClass();    

        RemotingServices.SetObjectUriForMarshal(obj, "testUri");
        RemotingServices.Marshal(obj);

        Console.WriteLine(RemotingServices.GetObjectUri(obj));
    }
}

.NET Framework
1.1 이후 사용 가능

이 형식의 모든 public static(Visual Basic의 공유 Visual Basic의 경우) 멤버는 스레드로부터 안전합니다. 인스턴스 멤버는 스레드로부터의 안전이 보장되지 않습니다.

맨 위로 이동
표시: