Была ли эта страница полезной?
Ваш отзыв об этом контенте важен для нас. Расскажите нам о том, что вы думаете.
Дополнительный отзыв?
1500 символов осталось
MarshalByRefObject - класс
Collapse the table of content
Expand the table of content
Данная статья переведена автоматически. Наведите указатель мыши на предложения статьи, чтобы просмотреть исходный текст. Дополнительные сведения.
Перевод
Текст оригинала

MarshalByRefObject - класс

Разрешает доступ к объектам через границы доменов приложения в приложениях, поддерживающих удаленное взаимодействие.

Пространство имен:  System
Сборка:  mscorlib (в mscorlib.dll)

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

Тип MarshalByRefObject предоставляет следующие члены.

  ИмяОписание
Защищенный методПоддерживается платформой XNA FrameworkMarshalByRefObjectИнициализирует новый экземпляр класса MarshalByRefObject.
В начало страницы

  ИмяОписание
Открытый методCreateObjRefСоздает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом.
Открытый методПоддерживается платформой XNA FrameworkEquals(Object)Определяет, равен ли заданный объект текущему объекту. (Унаследовано от Object.)
Защищенный методПоддерживается платформой XNA FrameworkFinalize Позволяет объекту попытаться освободить ресурсы и выполнить другие операции по очистке перед тем, как объект будет утилизирован сборщиком мусора. (Унаследовано от Object.)
Открытый методПоддерживается платформой XNA FrameworkGetHashCode Играет роль хэш-функции для определённого типа.
(Унаследовано от Object.)
Открытый методGetLifetimeServiceИзвлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра.
Открытый методПоддерживается платформой XNA FrameworkGetType Возвращает объект класса Type для текущего экземпляра. (Унаследовано от Object.)
Открытый методInitializeLifetimeServiceВозвращает объект обслуживания во время существования для управления политикой времени существования данного экземпляра.
Защищенный методПоддерживается платформой XNA FrameworkMemberwiseClone() Создает "поверхностную" копию текущего объекта. (Унаследовано от Object.)
Защищенный методMemberwiseClone(Boolean)Создает неполную копию текущего объекта MarshalByRefObject.
Открытый методПоддерживается платформой XNA FrameworkToString Возвращает строковое представление текущего объекта.
(Унаследовано от Object.)
В начало страницы

Домен приложения является частью процесса операционной системы, в которой находится одно или несколько приложений. Объекты в пределах одного домена приложения взаимодействуют непосредственно. Взаимодействие объектов в разных доменах приложений происходит либо путем передачи копий объектов через границы доменов приложений, либо путем обмена сообщениями при помощи прокси-сервера.

MarshalByRefObject является базовым классом объектов, взаимодействующих через границы доменов приложения путем обмена сообщениями при помощи прокси-сервера. Объекты, не являющиеся наследниками класса MarshalByRefObject, маршалируются по значению неявным образом. Когда удаленное приложение обращается к маршалируемому по значению объекту, копия этого объекта передается через границы домена приложения.

В пределах локального домена приложения доступ к объектам MarshalByRefObject предоставляется непосредственно. При первом доступе приложения в удаленном домене к объекту MarshalByRefObject в удаленное приложение передается прокси-сервер. Последующие вызовы прокси-сервера снова маршалируются в объект, находящийся в локальном домене приложения.

Если тип используется в различных доменах приложения, типы должны быть наследниками класса MarshalByRefObject. При этом состояние объекта копироваться не должно, так как члены объекта непригодны для использования вне домена приложения, в котором они были созданы.

Этот раздел содержит два примера кода: В первом примере кода показывается, как создать экземпляра класса в другом домене приложения. Во втором примере кода демонстрируется простой класс, который можно использовать для удаленного взаимодействия.

Пример 1

В следующем примере кода показан простой способ выполнения кода в другом домене приложения. В этом примере определяется класс с именем Worker, являющийся наследником класса MarshalByRefObject, для которого задается метод, выводящий на экран имя домена приложения, в котором он выполняется. В примере экземпляр класса 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 (клиентский профиль)

Поддерживается в версиях: 4, 3.5 с пакетом обновления 1 (SP1)

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista с пакетом обновления 2 (SP2), Windows Server 2008 (роль основных серверных компонентов не поддерживается), Windows Server 2008 R2 (роль основных серверных компонентов поддерживается в пакете обновления 1 (SP1) или выше; системы на базе Itanium не поддерживаются)

.NET Framework поддерживает не все версии каждой платформы. Поддерживаемые версии перечислены в разделе Требования к системе для .NET Framework.

Любые открытые члены этого типа, объявленные как static (Shared в Visual Basic), являются потокобезопасными. Потокобезопасность членов экземпляров не гарантируется.

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

Добавления сообщества

ДОБАВИТЬ
Показ:
© 2015 Microsoft