Récemment, j'ai découvert le Remoting, juste pour le comprendre, et j'ai trouvé que le Remoting est effectivement une bonne chose.
Nous avons généralement trois manières d'utiliser le remoting, la première est
la première : Publier un objet public
Les objets publics sont créés localement Deuxième type : Création à distance d'un objet public (SAO).
Le troisième type de création d'objet dans les requêtes clients : Création à distance d'un objet privé (CAO)
L'objet est créé sur HOST et le client fait référence au répertoire d'objets sur le serveur.
Je ne comprends pas bien les différences essentielles entre ces trois types. Les méthodes de création à distance de ces trois méthodes sont également différentes.
première voie
Hôte:
ChannelServices.RegisterChannel (nouveau TcpChannel(1500)) ;
cTransfer Trans = nouveau cTransfer();
RemotingServices.Marshal (Trans, "TestService");Client :
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://hôte:1500/TestService");
Deuxième façon
Hôte:
ChannelServices.RegisterChannel (nouveau TcpChannel(1500)) ;
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService", WellKnownObjectMode.Singleton);Client :
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://hôte:1500/TestService");
La troisième voie
Hôte:
ChannelServices.RegisterChannel (nouveau TcpChannel(1500)) ;
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Client :
objet[] attr = {new UrlAttribute("tcp://host:1500"});
object[] args = {"Exemple d'argument du constructeur"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
Si nous avons besoin d'un objet pour permettre le traitement des appels à distance, alors cet objet doit hériter de la classe MarshalByRefObject.
Comment transférer des fichiers pendant le remoting ? L'idée de base est d'ouvrir le fichier client dans le client, de convertir le type Byte[] puis d'appeler l'objet hôte.
Objets transférés entre Client et Hôte
[Sérialisable]
structure publique kAction
{
nom de fichier de chaîne publique ;
contexte d'octet public[] ;
};Ouvrez le fichier et enregistrez les octets du flux dans le contexte
Stream fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0 ;
octet[] Contenu = nouvel octet[((int) fileStream.Length) + 1];
fileStream.Read(Content,0,Content.Length);
Une fois que l'hôte a lu le Kaction, il l'enregistre dans le dossier spécifié.
MemoryStream meoeryStream=nouveau MemoryStream(k_Action.context);
FileStream fileStream=new FileStream (@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Close();
meoeryStream.Close();
Il a été constaté que de nouveaux objets ne peuvent pas être définis dans l'objet. Lors de la préparation de l'envoi à HOST, le message "contient des types potentiellement dangereux" s'affichera.
[Sérialisable]
structure publique kAction
{
nom de fichier de chaîne publique ;
contexte d'octet public[] ;
public FineInfo fileInfo;//ici
};
Enregistrez vos pensées. Quand j'aurai le temps, je ferai le tri et ferai un article complet la prochaine fois.
les blogs de cnzc