Compartilhar via


RemotingServices.Marshal Método

Definição

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

Sobrecargas

Marshal(MarshalByRefObject)

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

Marshal(MarshalByRefObject, String)

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

Marshal(MarshalByRefObject, String, Type)

Usa um MarshalByRefObject e converte-o em uma instância da classe ObjRef com o URI especificado e o Typefornecido.

Marshal(MarshalByRefObject)

Usa um MarshalByRefObject, registra-o com a infraestrutura de comunicação remota e converte-o 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 mais altos na caixa de chamadas não tem permissão para configurar tipos e canais de comunicação remota.

Comentários

Um ObjRef é uma representação serializável de um objeto usado para transferir uma referência de objeto por 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 o Type e a classe do objeto que está sendo marshalado, 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 método SetObjectUriForMarshal, 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 parâmetro Obj for um proxy, uma exceção será gerada. Para proxies personalizados, essa restrição é relaxada porque o proxy transparente é tratado como o objeto do servidor.

Confira também

Aplica-se a

Marshal(MarshalByRefObject, String)

Converte o MarshalByRefObject fornecido 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 o 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 de objeto e o parâmetro URI não é null.

Pelo menos um dos chamadores mais altos na caixa de chamadas não tem permissão para configurar tipos e canais de comunicação remota.

Exemplos

O exemplo de código a seguir demonstra como usar o método Marshal atual 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 por 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 o Type e a classe do objeto que está sendo marshalado, 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 parâmetro Obj for um proxy, uma exceção será gerada. Para proxies personalizados, essa restrição é relaxada porque o proxy transparente é tratado como o objeto do servidor.

Confira também

Aplica-se a

Marshal(MarshalByRefObject, String, Type)

Usa um MarshalByRefObject e converte-o em uma instância da classe ObjRef com o URI especificado e o Typefornecido.

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 é empacotado. Pode ser null.

RequestedType
Type

O TypeObj é empacotado como. 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 mais altos na caixa de chamadas não tem permissão para configurar tipos e canais de comunicação remota.

Comentários

Um ObjRef é uma representação serializável de um objeto usado para transferir uma referência de objeto por 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 o Type e a classe do objeto que está sendo marshalado, 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 Type especificado é 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 parâmetro Obj for um proxy, uma exceção será gerada. Para proxies personalizados, essa restrição é relaxada porque o proxy transparente é tratado como o objeto do servidor.

Confira também

Aplica-se a