RemotingServices.Marshal Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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
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
O objeto a ser convertido.
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
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
.
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.