Vor kurzem habe ich etwas über Remoting gelernt, nur um es zu verstehen, und ich habe festgestellt, dass Remoting tatsächlich eine gute Sache ist.
Wir haben normalerweise drei Möglichkeiten, Remoting zu verwenden, eine davon ist
die erste: Veröffentlichen eines öffentlichen Objekts
Öffentliche Objekte werden lokal erstellt. Zweiter Typ: Remote-Erstellung eines öffentlichen Objekts (SAO).
Die dritte Art der Objekterstellung in Client-Anfragen: Remote-Erstellung eines privaten Objekts (CAO)
Das Objekt wird auf HOST erstellt und der Client verweist auf das Objektverzeichnis auf dem Server.
Ich habe kein gutes Verständnis für die wesentlichen Unterschiede zwischen diesen drei Typen. Die Remoting-Erstellungsmethoden dieser drei Methoden unterscheiden sich ebenfalls.
erster Weg
Gastgeber:
ChannelServices.RegisterChannel (neuer TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal (Trans, „TestService“);Client:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
Zweiter Weg
Gastgeber:
ChannelServices.RegisterChannel (neuer TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService", WellKnownObjectMode.Singleton);Client:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
Der dritte Weg
Gastgeber:
ChannelServices.RegisterChannel (neuer TcpChannel(1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Client:
object[] attr = {new UrlAttribute("tcp://host:1500")};
object[] args = {"Beispielkonstruktorargument"};
cTransfer T = (cTransfer) Activator.CreateInstance(typeof(cTransfer), args, attr);
Wenn wir ein Objekt benötigen, um die Remote-Anrufverarbeitung zu ermöglichen, muss dieses Objekt von der MarshalByRefObject-Klasse erben.
Wie übertrage ich Dateien während des Remotings? Die Grundidee besteht darin, die Datei des Clients im Client zu öffnen, den Typ Byte[] zu konvertieren und dann das Host-Objekt aufzurufen.
Zwischen Client und Host übertragene Objekte
[Serialisierbar]
öffentliche Struktur kAction
{
öffentlicher String-Dateiname;
öffentlicher Byte[]-Kontext;
};Öffnen Sie die Datei und speichern Sie die Stream-Bytes im Kontext
Stream fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0;
byte[] Content = new byte[((int) fileStream.Length) + 1];
fileStream.Read(Content,0,Content.Length);
Nachdem der Host die Kaction gelesen hat, speichert er sie im angegebenen Ordner.
MemoryStream meoeryStream=new MemoryStream(k_Action.context);
FileStream fileStream=new FileStream(@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Close();
meoeryStream.Close();
Es wurde festgestellt, dass im Objekt keine neuen Objekte definiert werden können. Bei der Vorbereitung zum Senden an HOST wird die Meldung „Enthält potenziell gefährliche Typen“ angezeigt.
[Serialisierbar]
öffentliche Struktur kAction
{
öffentlicher String-Dateiname;
öffentlicher Byte[]-Kontext;
public FineInfo fileInfo;//here
};
Notieren Sie Ihre Gedanken. Wenn ich Zeit habe, werde ich es klären und das nächste Mal einen vollständigen Artikel verfassen.
cnzcs Blogs