Heim > Artikel > Backend-Entwicklung > Detailliertes Beispiel für das Hochladen von Dateien durch ASP.NET über den Remoting-Dienst
Vor kurzem lerne ich Remoting, 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 ist
Die erste: Veröffentlichen eines öffentlichen Objekts
Das öffentliche Objekt wird lokal erstellt
Die zweite: Remote-Erstellung von ein öffentliches Objekt (SAO)
Das Objekt wird in der Client-Anfrage erstellt
Dritter Typ: Remote-Erstellung eines privaten Objekts (CAO)
Das Objekt wird auf HOST erstellt und der Client verweist auf das Objekt der Server
Inhalt Ich habe kein gutes Verständnis für die wesentlichen Unterschiede zwischen diesen drei Typen. Die Remoting-Erstellungsmethoden dieser drei Methoden unterscheiden sich ebenfalls.
Der erste Weg
Host:
ChannelServices.RegisterChannel (new TcpChannel(1500));
cTransfer Trans = new cTransfer();
RemotingServices.Marshal (Trans, " TestService ");Client:
cTransfer T = (cTransfer) Activator.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
Der zweite Weg
Host:
ChannelServices.RegisterChannel (new TcpChannel(1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"TestService", WellKnownObjectMode.Singleton);Client:
cTransfer T = (cTransfer ) Activator .GetObject(typeof(cTransfer),
„tcp://host:1500/TestService“);
Der dritte Weg
Host:
ChannelServices.RegisterChannel (new TcpChannel(1500) );
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Client:
object[] attr = {new UrlAttribute("tcp://host:1500")};
object[] args = { "Beispielkonstruktor argument"};
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 (Objekt) erben aus der MarshalByRefObject-Klasse.
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.
Objekt zwischen Client und Host übertragen
[Serialisierbar]
public struct kAction
{
public string filename;
public byte[] context;
} ;Open die Datei und speichern Sie die Stream-Bytes im Kontext
Stream fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Position=0;
byte[] Content = neues Byte [((int) fileStream.Length) + 1];
fileStream.Read(Content,0,Content.Length) ;
Nachdem der Host die Kaction gelesen hat, speichern Sie sie im unten angegebenen Dateiclip
MemoryStream meoeryStream=new MemoryStream(k_Action.context);
FileStream fileStream=new FileStream(@"d:"+k_Action.filename,FileMode.Create);
meoeryStream.WriteTo(fileStream); Close();
meoeryStream.Close();
Es wurde festgestellt, dass im Objekt kein neues Objekt definiert werden kann. Bei der Vorbereitung zum Senden an HOST wird die Meldung „Enthält potenziell gefährliche Typen“ angezeigt.
[Serialisierbar]
public struct kAction
{
public string filename;
public byte[] context;
public FineInfo fileInfo;//here
Nehmen Sie Ihre eigenen Erfahrungen auf. Wenn ich Zeit habe, werde ich es klären und das nächste Mal einen vollständigen Artikel verfassen.
Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel für das Hochladen von Dateien durch ASP.NET über den Remoting-Dienst. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!