Recientemente, estoy aprendiendo sobre Remoting, solo para entenderlo, y descubrí que Remoting es realmente algo bueno.
Normalmente tenemos tres formas de utilizar la comunicación remota, una es
la primera: Publicar un objeto público
Los objetos públicos se crean localmente. Segundo tipo: Creación remota de un objeto público (SAO).
El tercer tipo de creación de objetos en las solicitudes de los clientes: creación remota de un objeto privado (CAO)
El objeto se crea en HOST y el cliente hace referencia al directorio de objetos en el servidor.
No entiendo bien las diferencias esenciales entre estos tres tipos. Los métodos de creación remota de estos tres métodos también son diferentes.
primera manera
Anfitrión:
ChannelServices.RegisterChannel (nuevo TcpChannel(1500));
cTransfer Trans = nuevo cTransfer();
RemotingServices.Marshal (Trans, "TestService");Cliente:
cTransfer T = (cTransfer) Activador.GetObject(tipode(cTransfer),
"tcp://host:1500/TestService");
Segunda forma
Anfitrión:
ChannelServices.RegisterChannel (nuevo TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(tipode(cTransfer),
"TestService", WellKnownObjectMode.Singleton);Cliente:
cTransfer T = (cTransfer) Activador.GetObject(tipode(cTransfer),
"tcp://host:1500/TestService");
la tercera manera
Anfitrión:
ChannelServices.RegisterChannel (nuevo TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Cliente:
objeto[] atributo = {nuevo UrlAttribute("tcp://host:1500")};
object[] args = {"Argumento del constructor de muestra"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
Si necesitamos un objeto que permita el procesamiento remoto de llamadas, entonces este objeto debe heredar de la clase MarshalByRefObject.
¿Cómo transferir archivos durante la comunicación remota? La idea básica es abrir el archivo del cliente en el cliente, convertir el tipo Byte [] y luego llamar al objeto host.
Objetos transferidos entre Cliente y Host
[Serializable]
estructura pública kAcción
{
nombre de archivo de cadena pública;
contexto de byte público [];
};Abra el archivo y guarde los bytes de flujo en el Contexto
Stream fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0;
byte[] Contenido = nuevo byte[((int) fileStream.Length) + 1];
fileStream.Read(Contenido,0,Contenido.Longitud);
Después de que el Host lee la Kaction, la guarda en la carpeta 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();
Se descubrió que no se pueden definir nuevos objetos en el objeto. Al prepararse para enviar al HOST, aparecerá el mensaje "contiene tipos potencialmente peligrosos".
[Serializable]
estructura pública kAcción
{
nombre de archivo de cadena pública;
contexto de byte público [];
public FineInfo fileInfo;//aquí
};
Registre sus pensamientos. Cuando tenga tiempo, lo solucionaré y la próxima vez haré un artículo completo.
blogs de cnzc