RemotingServices.Marshal Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Converte o dado MarshalByRefObject numa instância da ObjRef classe, que pode ser serializada para transmissão entre domínios de aplicação e através de uma rede.
Sobrecargas
| Name | Description |
|---|---|
| Marshal(MarshalByRefObject) |
Pega num MarshalByRefObject, regista-o na infraestrutura remota e converte-o numa instância da ObjRef classe. |
| Marshal(MarshalByRefObject, String) |
Converte o dado MarshalByRefObject numa instância da ObjRef classe com o URI especificado. |
| Marshal(MarshalByRefObject, String, Type) |
Pega num MarshalByRefObject e converte-o numa instância da ObjRef classe com o URI especificado, e o .Type |
Marshal(MarshalByRefObject)
Pega num MarshalByRefObject, regista-o na infraestrutura remota e converte-o numa instância da ObjRef classe.
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 objetivo a converter.
Devoluções
Uma instância da ObjRef classe que representa o objeto especificado no Obj parâmetro.
Exceções
O Obj parâmetro é um proxy de objeto.
Pelo menos um dos chamadores mais acima na pilha de chamadas não tem permissão para configurar tipos e canais de remoto.
Observações
A ObjRef é uma representação serializável de um objeto usada para transferir uma referência de objeto através de um limite de domínio de aplicação. Criar um ObjRef para um objeto é conhecido como marshaling. Podem ObjRef ser transferidos através de um canal para outro domínio de aplicação (possivelmente noutro processo ou computador). Uma vez no outro domínio de aplicação, o ObjRef deve ser analisado para criar um proxy para o objeto, geralmente ligado ao objeto real. Esta operação é conhecida como unmarshaling.
A contém informação que descreve a ObjRef classe e do objeto a ser marshaleado, um URI que identifica de forma única a instância específica do objeto, e informações relacionadas com Type comunicação sobre como chegar à subdivisão remota onde o objeto está localizado.
Durante o marshaling, é utilizado o contexto do thread atual, não o contexto que estava ativo quando o objeto foi criado. Se um URI não foi explicitamente definido pelo SetObjectUriForMarshal método, é automaticamente gerado pela infraestrutura de identidade remota.
Não se pode associar um URI a um proxy por uma de duas razões: ou o URI foi gerado do lado do servidor para o objeto que representa, ou o objeto é bem conhecido, caso em que o URI é conhecido. Por esta razão, se o Obj parâmetro for um proxy, será lançada uma exceção. Para proxies personalizados, esta restrição é relaxada porque o proxy transparente é tratado como o objeto servidor.
Ver também
Aplica-se a
Marshal(MarshalByRefObject, String)
Converte o dado MarshalByRefObject numa instância da ObjRef classe 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 objetivo a converter.
Devoluções
Uma instância da ObjRef classe que representa o objeto especificado no Obj parâmetro.
Exceções
Obj é um proxy de objeto, e o URI parâmetro não nullé .
Pelo menos um dos chamadores mais acima na pilha de chamadas não tem permissão para configurar tipos e canais de remoto.
Exemplos
O exemplo de código seguinte demonstra como usar o método atual Marshal para marshal 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()
Observações
A ObjRef é uma representação serializável de um objeto usada para transferir uma referência de objeto através de um limite de domínio de aplicação. Criar um ObjRef para um objeto é conhecido como marshaling. Podem ObjRef ser transferidos através de um canal para outro domínio de aplicação (possivelmente noutro processo ou computador). Uma vez no outro domínio de aplicação, o ObjRef deve ser analisado para criar um proxy para o objeto, geralmente ligado ao objeto real. Esta operação é conhecida como unmarshaling.
A contém informação que descreve a ObjRef classe e do objeto a ser marshaleado, um URI que identifica de forma única a instância específica do objeto, e informações relacionadas com Type comunicação sobre como chegar à subdivisão remota onde o objeto está localizado.
Durante o marshaling, é utilizado o contexto do thread atual, não o contexto que estava ativo quando o objeto foi criado.
Não se pode associar um URI a um proxy por uma de duas razões: ou o URI foi gerado do lado do servidor para o objeto que representa, ou o objeto é bem conhecido, caso em que o URI é conhecido. Por esta razão, se o Obj parâmetro for um proxy, será lançada uma exceção. Para proxies personalizados, esta restrição é relaxada porque o proxy transparente é tratado como o objeto servidor.
Ver também
Aplica-se a
Marshal(MarshalByRefObject, String, Type)
Pega num MarshalByRefObject e converte-o numa instância da ObjRef classe com o URI especificado, e o .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
Parâmetros
O objeto a converter num ObjRef.
- ObjURI
- String
O URI com que o objeto especificado no Obj parâmetro é marshalado. Pode ser null.
Devoluções
Uma instância da ObjRef classe que representa o objeto especificado no Obj parâmetro.
Exceções
Obj é um proxy de um objeto remoto, e o ObjURI parâmetro não nullé .
Pelo menos um dos chamadores mais acima na pilha de chamadas não tem permissão para configurar tipos e canais de remoto.
Observações
A ObjRef é uma representação serializável de um objeto usada para transferir uma referência de objeto através de um limite de domínio de aplicação. Criar um ObjRef para um objeto é conhecido como marshaling. Podem ObjRef ser transferidos através de um canal para outro domínio de aplicação (possivelmente noutro processo ou computador). Uma vez no outro domínio de aplicação, o ObjRef deve ser analisado para criar um proxy para o objeto, geralmente ligado ao objeto real. Esta operação é conhecida como unmarshaling.
A contém informação que descreve a ObjRef classe e do objeto a ser marshaleado, um URI que identifica de forma única a instância específica do objeto, e informações relacionadas com Type comunicação sobre como chegar à subdivisão remota onde o objeto está localizado.
O especificado Type é usado pela infraestrutura remota para limitar o âmbito da hierarquia de tipos exposta. Por exemplo, se o objeto A derivar do objeto B, que deriva do objeto C, e Marshal for chamado, então o cliente pode lançar o proxy entre C e B mas não para A.
Durante o marshaling, é utilizado o contexto do thread atual, não o contexto que estava ativo quando o objeto foi criado.
Não se pode associar um URI a um proxy por uma de duas razões: ou o URI foi gerado do lado do servidor para o objeto que representa, ou o objeto é bem conhecido, caso em que o URI é conhecido. Por esta razão, se o Obj parâmetro for um proxy, será lançada uma exceção. Para proxies personalizados, esta restrição é relaxada porque o proxy transparente é tratado como o objeto servidor.