Поделиться через


RemotingServices.Marshal Метод

Определение

Переводит данный MarshalByRefObject в экземпляр класса ObjRef, который может упорядочиваться для передачи между доменами приложения и по сети.

Перегрузки

Marshal(MarshalByRefObject)

Принимает MarshalByRefObject, регистрирует его инфраструктурой удаленного взаимодействия и переводит в экземпляр класса ObjRef.

Marshal(MarshalByRefObject, String)

Преобразует данный MarshalByRefObject в экземпляр класса ObjRef с указанным URI.

Marshal(MarshalByRefObject, String, Type)

Получает MarshalByRefObject и переводит его в экземпляр класса ObjRef с указанным URI, и предоставленным Type.

Marshal(MarshalByRefObject)

Принимает MarshalByRefObject, регистрирует его инфраструктурой удаленного взаимодействия и переводит в экземпляр класса ObjRef.

public:
 static System::Runtime::Remoting::ObjRef ^ Marshal(MarshalByRefObject ^ Obj);
public static System.Runtime.Remoting.ObjRef Marshal (MarshalByRefObject Obj);
static member Marshal : MarshalByRefObject -> System.Runtime.Remoting.ObjRef
Public Shared Function Marshal (Obj As MarshalByRefObject) As ObjRef

Параметры

Obj
MarshalByRefObject

Преобразуемый объект.

Возвращаемое значение

Экземпляр класса ObjRef, представляющий объект, указанный в параметре Obj.

Исключения

Параметр Obj является прокси объектом.

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

Комментарии

ObjRef это сериализуемое представление объекта, используемого для передачи ссылки на объект через границу домена приложения. ObjRef Создание объекта называется маршалингом. Можно ObjRef передать через канал в другой домен приложения (возможно, на другом процессе или компьютере). В другом домене ObjRef приложения необходимо проанализировать, чтобы создать прокси-сервер для объекта, который обычно подключен к реальному объекту. Эта операция называется распаковка.

Содержит ObjRef сведения, описывающие Type класс и маршалируемого объекта, универсальный код ресурса (URI), который однозначно идентифицирует конкретный экземпляр объекта, и сведения о том, как достичь подразделения удаленного взаимодействия, в котором находится объект.

Во время маршалинга используется контекст из текущего потока, а не контекст, который был активен при создании объекта. Если URI не был явно задан методом SetObjectUriForMarshal , он автоматически создается инфраструктурой удостоверений удаленного взаимодействия.

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

См. также раздел

Применяется к

Marshal(MarshalByRefObject, String)

Преобразует данный MarshalByRefObject в экземпляр класса ObjRef с указанным URI.

public:
 static System::Runtime::Remoting::ObjRef ^ Marshal(MarshalByRefObject ^ Obj, System::String ^ URI);
public static System.Runtime.Remoting.ObjRef Marshal (MarshalByRefObject Obj, string URI);
static member Marshal : MarshalByRefObject * string -> System.Runtime.Remoting.ObjRef
Public Shared Function Marshal (Obj As MarshalByRefObject, URI As String) As ObjRef

Параметры

Obj
MarshalByRefObject

Преобразуемый объект.

URI
String

Указанный URI, с которым инициализируется новый ObjRef. Может иметь значение null.

Возвращаемое значение

Экземпляр класса ObjRef, представляющий объект, указанный в параметре Obj.

Исключения

Obj является прокси объектом и параметр URI не равен null.

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

Примеры

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

TcpChannel^ channel = gcnew TcpChannel( 9000 );
ChannelServices::RegisterChannel( channel );
SampleWellKnown ^ objectWellKnown = gcnew SampleWellKnown;

// After the channel is registered, the Object* needs to be registered
// with the remoting infrastructure.  So, Marshal is called.
ObjRef^ objrefWellKnown = RemotingServices::Marshal( objectWellKnown, "objectWellKnownUri" );
Console::WriteLine( "An instance of SampleWellKnown type is published at {0}.", objrefWellKnown->URI );
Console::WriteLine( "Press enter to unregister SampleWellKnown, so that it is no longer available on this channel." );
Console::ReadLine();
RemotingServices::Disconnect( objectWellKnown );
Console::WriteLine( "Press enter to end the server process." );
Console::ReadLine();
TcpChannel channel = new TcpChannel(9000);
ChannelServices.RegisterChannel(channel);

SampleWellKnown objectWellKnown = new SampleWellKnown();

// After the channel is registered, the object needs to be registered
// with the remoting infrastructure.  So, Marshal is called.
ObjRef objrefWellKnown = RemotingServices.Marshal(objectWellKnown, "objectWellKnownUri");
Console.WriteLine("An instance of SampleWellKnown type is published at {0}.", objrefWellKnown.URI);

Console.WriteLine("Press enter to unregister SampleWellKnown, so that it is no longer available on this channel.");
Console.ReadLine();
RemotingServices.Disconnect(objectWellKnown);

Console.WriteLine("Press enter to end the server process.");
Console.ReadLine();
Dim channel As New TcpChannel(9000)
ChannelServices.RegisterChannel(channel)

Dim objectWellKnown As New SampleWellKnown()
' After the channel is registered, the object needs to be registered
' with the remoting infrastructure.  So, Marshal is called.
Dim objrefWellKnown As ObjRef = RemotingServices.Marshal(objectWellKnown, "objectWellKnownUri")
Console.WriteLine("An instance of SampleWellKnown type is published at {0}.", objrefWellKnown.URI)

Console.WriteLine("Press enter to unregister SampleWellKnown, so that it is no longer available on this channel.")
Console.ReadLine()
RemotingServices.Disconnect(objectWellKnown)
Console.WriteLine("Press enter to end the server process.")
Console.ReadLine()

Комментарии

ObjRef это сериализуемое представление объекта, используемого для передачи ссылки на объект через границу домена приложения. ObjRef Создание объекта называется маршалингом. Можно ObjRef передать через канал в другой домен приложения (возможно, на другом процессе или компьютере). В другом домене ObjRef приложения необходимо проанализировать, чтобы создать прокси-сервер для объекта, который обычно подключен к реальному объекту. Эта операция называется распаковка.

Содержит ObjRef сведения, описывающие Type класс и маршалируемого объекта, универсальный код ресурса (URI), который однозначно идентифицирует конкретный экземпляр объекта, и сведения о том, как достичь подразделения удаленного взаимодействия, в котором находится объект.

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

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

См. также раздел

Применяется к

Marshal(MarshalByRefObject, String, Type)

Получает MarshalByRefObject и переводит его в экземпляр класса ObjRef с указанным URI, и предоставленным Type.

public:
 static System::Runtime::Remoting::ObjRef ^ Marshal(MarshalByRefObject ^ Obj, System::String ^ ObjURI, Type ^ RequestedType);
public static System.Runtime.Remoting.ObjRef Marshal (MarshalByRefObject Obj, string ObjURI, Type RequestedType);
static member Marshal : MarshalByRefObject * string * Type -> System.Runtime.Remoting.ObjRef
Public Shared Function Marshal (Obj As MarshalByRefObject, ObjURI As String, RequestedType As Type) As ObjRef

Параметры

Obj
MarshalByRefObject

Объект, преобразуемый в ObjRef.

ObjURI
String

URI, с которым упакован и передан объект, указанный в параметре Obj. Может иметь значение null.

RequestedType
Type

Type, в качестве которого маршалируется Obj. Может иметь значение null.

Возвращаемое значение

Экземпляр класса ObjRef, представляющий объект, указанный в параметре Obj.

Исключения

Obj является прокси удаленного объекта, и параметр ObjUri не равен null.

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

Комментарии

ObjRef это сериализуемое представление объекта, используемого для передачи ссылки на объект через границу домена приложения. ObjRef Создание объекта называется маршалингом. Можно ObjRef передать через канал в другой домен приложения (возможно, на другом процессе или компьютере). В другом домене ObjRef приложения необходимо проанализировать, чтобы создать прокси-сервер для объекта, который обычно подключен к реальному объекту. Эта операция называется распаковка.

Содержит ObjRef сведения, описывающие Type класс и маршалируемого объекта, универсальный код ресурса (URI), который однозначно идентифицирует конкретный экземпляр объекта, и сведения о том, как достичь подразделения удаленного взаимодействия, в котором находится объект.

Указанный Type объект используется инфраструктурой удаленного взаимодействия для ограничения область иерархии предоставляемых типов. Например, если объект A является производным от объекта B, который является производным от объекта C, и Marshal вызывается, клиент может привести прокси-сервер между C и B, но не к A.

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

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

См. также раздел

Применяется к