Baru-baru ini, saya belajar tentang Remoting, hanya untuk memahaminya, dan saya menemukan bahwa Remoting memang merupakan hal yang baik.
Kami biasanya memiliki tiga cara untuk menggunakan jarak jauh, salah satunya adalah
yang pertama: Menerbitkan objek publik
Objek publik dibuat secara lokal Tipe kedua: Pembuatan objek publik jarak jauh (SAO)
Jenis pembuatan objek ketiga dalam permintaan klien: Pembuatan objek pribadi jarak jauh (CAO)
Objek dibuat di HOST, dan klien merujuk ke direktori objek di server.
Saya tidak memiliki pemahaman yang baik tentang perbedaan penting antara ketiga jenis ini. Metode pembuatan jarak jauh dari ketiga metode ini juga berbeda.
cara pertama
Tuan rumah:
ChannelServices.RegisterChannel (TcpChannel baru (1500));
cTransfer Trans = cTransfer baru();
RemotingServices.Marshal (Trans, "TestService");Klien:
cTransfer T = (cTransfer) Aktivator.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
Cara kedua
Tuan rumah:
ChannelServices.RegisterChannel (TcpChannel baru (1500));
RemotingConfiguration.RegisterWellKnownServiceType(typeof(cTransfer),
"Layanan Tes", WellKnownObjectMode.Singleton);Klien:
cTransfer T = (cTransfer) Aktivator.GetObject(typeof(cTransfer),
"tcp://host:1500/TestService");
Cara ketiga
Tuan rumah:
ChannelServices.RegisterChannel (TcpChannel baru (1500));
RemotingConfiguration.RegisterActivatedServiceType(typeof(cTransfer));Klien:
objek[] attr = {UrlAttribute baru("tcp://host:1500")};
object[] args = {"Contoh argumen konstruktor"};
cTransfer T = (cTransfer) Aktivator.CreateInstance(typeof(cTransfer), args, attr);
Jika kita memerlukan objek untuk memungkinkan pemrosesan panggilan jarak jauh, maka objek ini perlu diwarisi dari kelas MarshalByRefObject.
Bagaimana cara mentransfer file saat melakukan remote? Ide dasarnya adalah membuka file klien di klien, mengonversi tipe Byte[] dan kemudian memanggil objek host.
Objek yang ditransfer antara Klien dan Host
[Dapat diserialkan]
struct publik kAction
{
nama file string publik;
konteks byte[] publik;
};Buka file dan simpan byte aliran ke Konteks
Aliran fileStream=File.Open(this.transFileName.Text,FileMode.Open);
fileStream.Posisi=0;
byte[] Konten = byte baru[((int) fileStream.Length) + 1];
fileStream.Baca(Isi,0,Isi.Panjang);
Setelah Host membaca Kaction, ia menyimpannya ke folder yang ditentukan.
MemoryStream meoeryStream=MemoryStream baru(k_Action.context);
FileStream fileStream=FileStream baru(@"d:"+k_Action.nama file,FileMode.Create);
meoeryStream.WriteTo(fileStream);
fileStream.Tutup();
meoeryStream.Tutup();
Ditemukan bahwa objek baru tidak dapat didefinisikan di dalam objek. Saat bersiap untuk mengirim ke HOST, ia akan menampilkan pesan "berisi jenis yang berpotensi berbahaya".
[Dapat diserialkan]
struct publik kAction
{
nama file string publik;
konteks byte[] publik;
fileInfo FineInfo publik;//di sini
};
Catat pemikiran Anda. Jika saya punya waktu, lain kali saya akan memilahnya dan membuat artikel lengkap.
blog cnzc