Ten artykuł został przetłumaczony przez maszynę. Aby wyświetlić jego treść w języku angielskim, zaznacz pole wyboru Angielski. Możesz też wyświetlić angielski tekst w okienku wyskakującym, przesuwając wskaźnik myszy nad konkretny tekst”.
Tłumaczenie
Angielski

Klasa MarshalByRefObject

.NET Framework (current version)
 

Data opublikowania: październik 2016

Umożliwia dostęp do obiektów poza granice domeny aplikacji w aplikacjach tej komunikacji zdalnej pomocy technicznej.

Przestrzeń nazw:   System
Zestaw:  mscorlib (w 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

NazwaOpis
System_CAPS_protmethodMarshalByRefObject()

Inicjuje nowe wystąpienie MarshalByRefObject klasy.

NazwaOpis
System_CAPS_pubmethodCreateObjRef(Type)

Tworzy obiekt, który zawiera wszystkie istotne informacje wymagane do wygenerowania używany do komunikacji z obiektu zdalnego serwera proxy.

System_CAPS_pubmethodEquals(Object)

Określa, czy określony obiekt jest równy bieżącemu obiektowi.(Dziedziczone z Object).

System_CAPS_protmethodFinalize()

Umożliwia spróbuj zwolnić zasoby i wykonywać inne operacje czyszczenia, zanim zostanie odzyskane przez wyrzucanie elementów bezużytecznych.(Dziedziczone z Object).

System_CAPS_pubmethodGetHashCode()

Służy jako domyślna funkcji mieszania.(Dziedziczone z Object).

System_CAPS_pubmethodGetLifetimeService()

Pobiera bieżący okres istnienia obiektu usługi sterująca zasad okres istnienia dla tego wystąpienia.

System_CAPS_pubmethodGetType()

Pobiera Type bieżącego wystąpienia.(Dziedziczone z Object).

System_CAPS_pubmethodInitializeLifetimeService()

Uzyskuje obiektu usługi okres istnienia w celu kontroli zasad okres istnienia dla tego wystąpienia.

System_CAPS_protmethodMemberwiseClone()

Tworzy płytką kopię bieżącego Object.(Dziedziczone z Object).

System_CAPS_protmethodMemberwiseClone(Boolean)

Tworzy płytką kopię bieżącego MarshalByRefObject obiektu.

System_CAPS_pubmethodToString()

Zwraca ciąg, który reprezentuje bieżący obiekt.(Dziedziczone z Object).

Domeny aplikacji jest partycją w procesu systemu operacyjnego, w którym znajdują się co najmniej jednej aplikacji. Obiekty w tej samej domenie aplikacji komunikują się bezpośrednio. Obiekty w różnych domenach aplikacji komunikują się przez transport kopie obiektów poza granice domeny aplikacji lub przy użyciu serwera proxy do wymiany wiadomości.

MarshalByRefObjectKlasa podstawowa dla obiektów, które komunikują się poza granice domeny aplikacji poprzez wymianę wiadomości jest za pomocą serwera proxy. Obiekty, które nie dziedziczą MarshalByRefObject są niejawnie kierować według wartości. Jeśli zdalna aplikacja odwołuje się obiekt organizowany przez obiekt wartości, kopię obiektu jest przekazywany poza granice domeny aplikacji.

MarshalByRefObjectobiekty są dostępne bezpośrednio z poziomu granice domeny aplikacji lokalnej. Uzyskuje dostęp do domeny aplikacji po raz pierwszy aplikację w zdalnym MarshalByRefObject, serwer proxy jest przekazywany do aplikacji zdalnej. Kolejne wywołania na serwerze proxy są przekazywane do obiektów znajdujących się w domenie lokalnej aplikacji.

Typy musi dziedziczyć z MarshalByRefObject kiedy typ jest używany przez granice domeny aplikacji i stan obiektu nie należy kopiować ponieważ elementach członkowskich obiektu nie są użyteczne spoza domeny aplikacji, w której zostały utworzone.

Jeśli pochodzi z obiektu MarshalByRefObject do użytku poza granice domeny aplikacji, możesz powinien nie zastępują któregokolwiek z członków ani powinny można wywoływać metod bezpośrednio. Środowisko uruchomieniowe rozpoznaje, że klasy wyprowadzone z MarshalByRefObject powinny być przekazywane między granicami domeny aplikacji.

Ten rozdział zawiera dwa przykłady kodu. W pierwszym przykładzie kodu pokazano, jak można utworzyć wystąpienia klasy w innej domenie aplikacji. Drugi przykładowy kod przedstawia prostą klasę, która może służyć do komunikacji zdalnej.

Przykład 1

Poniższy przykład kodu pokazuje Najprostszym sposobem, aby wykonać kod w innej domenie aplikacji. W przykładzie zdefiniowano klasę o nazwie Worker dziedziczącego MarshalByRefObject, za pomocą metody, która wyświetla nazwę domeny aplikacji, w którym jest wykonywany. W przykładzie jest tworzony wystąpienia Worker w domyślnej domeny aplikacji i w nowej domenie aplikacji.

System_CAPS_noteUwaga

Zestaw, który zawiera Worker muszą być załadowane do obu domeny aplikacji, ale można go załadować innych zestawów występujących tylko w nowej domenie aplikacji.

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"
 */

Przykład 2

W poniższym przykładzie pokazano klasę pochodzącą od MarshalByRefObject czyli używane w dalszej komunikacji zdalnej.

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
Dostępne od 1.1

Wszystkie publiczne statyczne ( Shared w języku Visual Basic) elementy członkowskie tego typu są wątkowo bezpieczne. Dla żadnych elementów członkowskich wystąpień nie ma gwarancji bezpieczeństwa wątkowego.

Powrót do początku
Pokaż: