Compartilhar via


RemotingServices.Marshal Método

Definição

Converte um determinado MarshalByRefObject em uma instância da classe ObjRef, que pode ser serializada para a transmissão entre os domínios do aplicativo e por uma rede.

Sobrecargas

Marshal(MarshalByRefObject)

Utiliza um MarshalByRefObject, registra-o com a infraestrutura de comunicação remota e o converte em uma instância da classe ObjRef.

Marshal(MarshalByRefObject, String)

Converte um dado MarshalByRefObject em uma instância da classe ObjRef com o URI especificado.

Marshal(MarshalByRefObject, String, Type)

Seleciona um MarshalByRefObject e o converte em uma instância da classe ObjRef com o URI especificado e o Type fornecido.

Marshal(MarshalByRefObject)

Utiliza um MarshalByRefObject, registra-o com a infraestrutura de comunicação remota e o converte em uma instância da classe 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

Parâmetros

Obj
MarshalByRefObject

O objeto a ser convertido.

Retornos

Uma instância da classe ObjRef que representa o objeto especificado no parâmetro Obj.

Exceções

O parâmetro Obj é um proxy de objeto.

Pelo menos um dos chamadores no topo da pilha de chamadas não tem permissão para configurar canais e tipos de comunicação remota.

Comentários

Um ObjRef é uma representação serializável de um objeto usado para transferir uma referência de objeto entre um limite de domínio do aplicativo. A criação de um ObjRef para um objeto é conhecida como marshaling. O ObjRef pode ser transferido por meio de um canal para outro domínio de aplicativo (possivelmente em outro processo ou computador). Uma vez no outro domínio do aplicativo, o ObjRef deve ser analisado para criar um proxy para o objeto, geralmente conectado ao objeto real. Essa operação é conhecida como unmarshaling.

Um ObjRef contém informações que descrevem a Type classe e do objeto que está sendo realizado em marshaling, um URI que identifica exclusivamente a instância de objeto específica e informações relacionadas à comunicação sobre como alcançar a subdivisão de comunicação remota onde o objeto está localizado.

Durante o marshaling, o contexto do thread atual é usado, não o contexto que estava ativo quando o objeto foi criado. Se um URI não tiver sido definido explicitamente pelo SetObjectUriForMarshal método , ele será gerado automaticamente pela infraestrutura de identidade remota.

Não é possível associar um URI a um proxy por um dos dois motivos: o URI foi gerado no lado do servidor para o objeto que ele representa ou o objeto é bem conhecido, caso em que o URI é conhecido. Por esse motivo, se o Obj parâmetro for um proxy, uma exceção será gerada. Para proxies personalizados, essa restrição é reduzida porque o proxy transparente é tratado como o objeto de servidor.

Confira também

Aplica-se a

Marshal(MarshalByRefObject, String)

Converte um dado MarshalByRefObject em uma instância da classe ObjRef com o URI especificado.

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

Parâmetros

Obj
MarshalByRefObject

O objeto a ser convertido.

URI
String

O URI especificado com a qual inicializar o novo ObjRef. Pode ser null.

Retornos

Uma instância da classe ObjRef que representa o objeto especificado no parâmetro Obj.

Exceções

Obj é um proxy do objeto e o parâmetro URI não é null.

Pelo menos um dos chamadores no topo da pilha de chamadas não tem permissão para configurar canais e tipos de comunicação remota.

Exemplos

O exemplo de código a seguir demonstra como usar o método atual Marshal para realizar marshaling de um objeto especificado.

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()

Comentários

Um ObjRef é uma representação serializável de um objeto usado para transferir uma referência de objeto entre um limite de domínio do aplicativo. A criação de um ObjRef para um objeto é conhecida como marshaling. O ObjRef pode ser transferido por meio de um canal para outro domínio de aplicativo (possivelmente em outro processo ou computador). Uma vez no outro domínio do aplicativo, o ObjRef deve ser analisado para criar um proxy para o objeto, geralmente conectado ao objeto real. Essa operação é conhecida como unmarshaling.

Um ObjRef contém informações que descrevem a Type classe e do objeto que está sendo realizado em marshaling, um URI que identifica exclusivamente a instância de objeto específica e informações relacionadas à comunicação sobre como alcançar a subdivisão de comunicação remota onde o objeto está localizado.

Durante o marshaling, o contexto do thread atual é usado, não o contexto que estava ativo quando o objeto foi criado.

Não é possível associar um URI a um proxy por um dos dois motivos: o URI foi gerado no lado do servidor para o objeto que ele representa ou o objeto é bem conhecido, caso em que o URI é conhecido. Por esse motivo, se o Obj parâmetro for um proxy, uma exceção será gerada. Para proxies personalizados, essa restrição é reduzida porque o proxy transparente é tratado como o objeto de servidor.

Confira também

Aplica-se a

Marshal(MarshalByRefObject, String, Type)

Seleciona um MarshalByRefObject e o converte em uma instância da classe ObjRef com o URI especificado e o Type fornecido.

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

Parâmetros

Obj
MarshalByRefObject

O objeto a ser convertido em um ObjRef.

ObjURI
String

O URI com o qual o objeto especificado no parâmetro Obj tem o marshaling realizado. Pode ser null.

RequestedType
Type

O como o qual o TypeObj tem o marshaling realizado. Pode ser null.

Retornos

Uma instância da classe ObjRef que representa o objeto especificado no parâmetro Obj.

Exceções

Obj é um proxy de um objeto remoto e o parâmetro ObjUri não é null.

Pelo menos um dos chamadores no topo da pilha de chamadas não tem permissão para configurar canais e tipos de comunicação remota.

Comentários

Um ObjRef é uma representação serializável de um objeto usado para transferir uma referência de objeto entre um limite de domínio do aplicativo. A criação de um ObjRef para um objeto é conhecida como marshaling. O ObjRef pode ser transferido por meio de um canal para outro domínio de aplicativo (possivelmente em outro processo ou computador). Uma vez no outro domínio do aplicativo, o ObjRef deve ser analisado para criar um proxy para o objeto, geralmente conectado ao objeto real. Essa operação é conhecida como unmarshaling.

Um ObjRef contém informações que descrevem a Type classe e do objeto que está sendo realizado em marshaling, um URI que identifica exclusivamente a instância de objeto específica e informações relacionadas à comunicação sobre como alcançar a subdivisão de comunicação remota onde o objeto está localizado.

O especificado Type é usado pela infraestrutura de comunicação remota para limitar o escopo da hierarquia de tipos exposta. Por exemplo, se o objeto A deriva do objeto B, que deriva do objeto C e Marshal é chamado, o cliente pode converter o proxy entre C e B, mas não para A.

Durante o marshaling, o contexto do thread atual é usado, não o contexto que estava ativo quando o objeto foi criado.

Não é possível associar um URI a um proxy por um dos dois motivos: o URI foi gerado no lado do servidor para o objeto que ele representa ou o objeto é bem conhecido, caso em que o URI é conhecido. Por esse motivo, se o Obj parâmetro for um proxy, uma exceção será gerada. Para proxies personalizados, essa restrição é reduzida porque o proxy transparente é tratado como o objeto de servidor.

Confira também

Aplica-se a