내보내기(0) 인쇄
모두 확장
이 문서는 기계로 번역한 것입니다. 원본 텍스트를 보려면 포인터를 문서의 문장 위로 올리십시오. 추가 정보
번역
원본

MarshalByRefObject 클래스

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

System.Object
  System.MarshalByRefObject
    자세히...

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

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

MarshalByRefObject 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Protected 메서드XNA Framework에서 지원MarshalByRefObject MarshalByRefObject 클래스의 새 인스턴스를 초기화합니다.
위쪽

  이름설명
Public 메서드CreateObjRef원격 개체와 통신하는 데 사용되는 프록시 생성에 필요한 모든 관련 정보가 들어 있는 개체를 만듭니다.
Public 메서드XNA Framework에서 지원Equals(Object) 지정한 개체가 현재 개체와 같은지 여부를 확인합니다. (Object에서 상속됨)
Protected 메서드XNA Framework에서 지원Finalize 개체가 가비지 수집자에서 회수되기 전에, 해당 개체에서 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드XNA Framework에서 지원GetHashCode기본 해시 함수로 작동합니다. (Object에서 상속됨)
Public 메서드GetLifetimeService이 인스턴스의 수명 정책을 제어하는 현재의 수명 서비스 개체를 검색합니다.
Public 메서드XNA Framework에서 지원GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드InitializeLifetimeService이 인스턴스의 수명 정책을 제어하기 위한 수명 서비스 개체를 가져옵니다.
Protected 메서드XNA Framework에서 지원MemberwiseClone()현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Protected 메서드MemberwiseClone(Boolean)현재 MarshalByRefObject 개체의 단순 복사본을 만듭니다.
Public 메서드XNA Framework에서 지원ToString현재 개체를 나타내는 문자열을 반환합니다. (Object에서 상속됨)
위쪽

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

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

MarshalByRefObject 개체는 로컬 응용 프로그램 도메인의 경계 내에서 직접 액세스합니다. 원격 응용 프로그램 도메인의 응용 프로그램이 MarshalByRefObject에 처음 액세스할 때, 원격 응용 프로그램에 프록시가 전달됩니다. 프록시에서 다음에 수행되는 호출은 로컬 응용 프로그램 도메인에 있는 개체로 다시 마샬링됩니다.

형식이 응용 프로그램 도메인 경계를 넘어 사용될 때 MarshalByRefObject에서 상속되어야 하며, 개체의 멤버는 자신이 만들어진 응용 프로그램 도메인 외부에서 사용할 수 없으므로 개체의 상태는 복사되면 안됩니다.

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

예제 1

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

참고참고

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(
            Assembly.GetExecutingAssembly().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

4.5.2, 4.5.1, 4.5, 4, 3.5, 3.0, 2.0, 1.1, 1.0에서 지원

.NET Framework Client Profile

4, 3.5 SP1에서 지원

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008(서버 코어 역할은 지원되지 않음), Windows Server 2008 R2(서버 코어 역할은 SP1 이상에서 지원, Itanium은 지원되지 않음)

.NET Framework에서 모든 플랫폼의 전체 버전을 지원하지는 않습니다. 지원되는 버전의 목록을 보려면 .NET Framework 시스템 요구 사항을 참조하십시오.

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 인터페이스 멤버는 스레드로부터 안전하지 않습니다.

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.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

커뮤니티 추가 항목

추가
Microsoft는 MSDN 웹 사이트에 대한 귀하의 의견을 이해하기 위해 온라인 설문 조사를 진행하고 있습니다. 참여하도록 선택하시면 MSDN 웹 사이트에서 나가실 때 온라인 설문 조사가 표시됩니다.

참여하시겠습니까?
표시:
© 2015 Microsoft