Recentemente, estou aprendendo sobre Remoting, só para entendê-lo, e descobri que Remoting é realmente uma coisa boa.
Normalmente temos três maneiras de usar a comunicação remota, uma é
a primeira: Publicando um objeto público
Os objetos públicos são criados localmente. Segundo tipo: Criação remota de um objeto público (SAO).
O terceiro tipo de criação de objetos em solicitações de clientes: Criação remota de um objeto privado (CAO)
O objeto é criado no HOST e o cliente refere-se ao diretório do objeto no servidor.
Não tenho um bom entendimento das diferenças essenciais entre esses três tipos. Os métodos de criação remota desses três métodos também são diferentes.
primeira maneira
Hospedar:
ChannelServices.RegisterChannel (novo TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal (Trans, "TestService");Cliente:
cTransfer T = (cTransfer) Ativador.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
Segunda via
Hospedar:
ChannelServices.RegisterChannel (novo TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService", WellKnownObjectMode.Singleton);Cliente:
cTransfer T = (cTransfer) Ativador.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
A terceira maneira
Hospedar:
ChannelServices.RegisterChannel (novo TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Cliente:
object[] attr = {new UrlAttribute("tcp://host:1500")};
object[] args = {"Exemplo de argumento do construtor"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
Se precisarmos de um objeto para permitir o processamento remoto de chamadas, esse objeto precisará herdar da classe MarshalByRefObject.
Como transferir arquivos durante a comunicação remota? A ideia básica é abrir o arquivo do cliente no cliente, converter o tipo Byte[] e depois chamar o objeto Host.
Objetos transferidos entre Cliente e Host
[Serializável]
estrutura pública kAction
{
nome do arquivo de string pública;
contexto de byte público[];
};Abra o arquivo e salve os bytes do fluxo no Contexto
Stream fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0;
byte[] Conteúdo = novo byte[((int) fileStream.Length) + 1];
fileStream.Read(Conteúdo,0,Conteúdo.Length);
Depois que o Host lê o Kaction, ele o salva na pasta especificada.
MemoryStream meoeryStream=new MemoryStream(k_Action.context);
FileStream fileStream=new FileStream(@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Close();
meoeryStream.Close();
Verificou-se que novos objetos não podem ser definidos no objeto. Ao preparar o envio para o HOST, será solicitado "contém tipos potencialmente perigosos".
[Serializável]
estrutura pública kAction
{
nome do arquivo de string pública;
contexto de byte público[];
public FineInfo fileInfo;//aqui
};
Registre seus pensamentos. Quando tiver tempo, resolverei isso e farei um artigo completo na próxima vez.
blogs do cnzc