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
Параметры
Преобразуемый объект.
Возвращаемое значение
Экземпляр класса 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
Параметры
Преобразуемый объект.
Возвращаемое значение
Экземпляр класса 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
Параметры
Объект, преобразуемый в ObjRef.
- ObjURI
- String
URI, с которым упакован и передан объект, указанный в параметре 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
параметр является прокси-сервером, будет выдано исключение. Для пользовательских прокси-серверов это ограничение ослабляется, так как прозрачный прокси-сервер обрабатывается как объект сервера.