Dưới đây là bài giảng Hệ quản trị cơ sở dữ liệu II: Điều khiển từ xa (Remoting) do Phan Hiền biên soạn. Mời các bạn tham khảo bài giảng để hiểu rõ hơn về cấu trúc, ảnh, đối tượng của điều khiển từ xa. Với các bạn chuyên ngành Công nghệ thông tin thì đây là tài liệu hữu ích.
ĐIỀU KHIỂN TỪ XA (REMOTING) HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU II Phan Hiền CẤU TRÚC (TYPE) Quản lý cấu trúc lớp (khơng có giá trị) Quản lý nội dung lệnh hành vi (mã nguồn) Cú pháp lấy cấu trúc typeof (kiểu_dữ_liệu) Type.GetType(tên_dữ_liệu) Đốitượng.GetType() Ví dụ Type t = Type t = ChuNhat Type t = typeof(int); Type.GetType(“System.String”); cn = new ChuNhat(); cn.GetType(); ẢNH (REFLECTION) Mô tả thông tin phản ảnh thành phần lớp hay hàm hay thuộc tính, …, quản lý nội dung lệnh hành vi Ảnh tạo từ cấu trúc lớp (đương nhiên khơng có giá trị thuộc tính – lớp) Một đối tượng thật hình thành từ cấu trúc (cùng ảnh lớp) giá trị thuộc tính hay đối tượng Các lớp mô tả ảnh: MethodInfo FieldInfo PropertyInfo ContructorInfo EventInfo MemberInfo ĐỐI TƯỢNG (OBJECT) Là lớp chung cho tất đối tượng Mọi lớp kế thừa từ lớp Object Mọi đối tượng ép Object để lưu giá trị mà rỏ cấu trúc xác ACTIVATOR Lớp tạo liệu đối tượng từ cấu trúc với ảnh khởi tạo Activator.CreateInstance(Type cấu_trúc, object[] mãng_giá_trị_cho_khởi_tạo_tương_ứng ) Activator.CreateInstance(Type cấu_trúc) Trả object (đối tượng theo lớp Object, lưu liệu cấu trúc theo lúc tạo cách rỏ ràng.) ẢNH (REFLECTION) namespace myReflection { public class thuvien { public int giatri = 2; public thuvien() { } public thuvien(int _gt) { giatri = _gt; } public string ghepchuoi(string s) { string kq = ""; for (int i = 0; i < giatri; i++) kq += s; return kq; } } } ẢNH (REFLECTION) Type t = Type.GetType("myReflection.thuvien"); MethodInfo mi = t.GetMethod("ghepchuoi", new Type[]{typeof(string)}); //object o = Activator.CreateInstance(t); object o = Activator.CreateInstance(t, new object[]{5}); string s = mi.Invoke(o, new object[]{ "chao " }) ToString().Trim(); -Nếu khởi tạo khơng tham số kết “chao chao ” Nếu khởi tạo có tham số kết “chao chao chao chao chao ” ẢNH (REFLECTION) - INVOKE Hàm Invoke dùng để gọi nội dung lệnh hàm với đối tượng có liệu Cơ chế thực thi hào toàn dựa vào cấu trúc (ảnh hành vi) đối tượng liệu tổng quan (object, Activator tạo ra) Điều tạo nên hình thức gọi hàm với tham số chủ yếu chuỗi định danh Người ta gọi gọi hàm qua ảnh hàm ASSEMBLY Dùng để load nội dung từ tập tin dll Lấy cấu trúc từ Assembly Tạo đối tượng từ Assembly Dùng hàm CreateInstance(…) Ví dụ: Assembly ass = Assembly.LoadFrom("aaa.dll"); Type t = ass.GetType(); Bạn load nội dung từ dll người dùng chép vào (không cần đăng ký reference) ĐIỀU KHIỂN TỪ XA (REMOTING) Là chế kích hoạt đối tượng (hành vi) từ xa (ở máy khác) Lớp điều khiển từ xa bắt buộc phải kế thừa lớp đặc biệt MarshalByRefObject Đối tượng tham số hàm bắt buộc phải có kế thừa lớp Serializable Bên bị điều khiển (Gọi nơi cung cấp hành vi cho điều khiển từ xa) Bên điều khiển (Gọi nơi đưa yêu cầu thực thi hành vi từ xa) ĐIỀU KHIỂN TỪ XA (REMOTING) Ứng dụng gọi (Client) Nền Net Nhận kết Bên bị điều khiển - Server Cơng khai Lớp cho Remote (MarshalByRefObject) • Hành vi cho remote • Hành vi cho remote Gọi từ xa Tìm kiếm Cơng khai bên ngồi qua: + Định danh mạng + Cổng giao tiếp (Port) + Tên riêng Server Phải có giao diện Dll (Hàm không nội dung) Giao diện (Interface) Dll (Hàm không nội dung) VÍ DỤ GỌI TỪ XA - SERVER Tạo lớp phân số cho tham số truyền namespace server { [Serializable] public class phanso { public int ts, ms; public phanso() { ts = 0; ms = 1; } public phanso(int _ts, int _ms) { ts = _ts; ms = _ms; } } } VÍ DỤ GỌI TỪ XA - SERVER Tạo lớp hành vi cho phép gọi từ xa namespace server { public class remotechucnang : MarshalByRefObject { public remotechucnang() { } public phanso nhan(phanso p) { p.ts = p.ts * 2; return p; } public int cong(int x) { return x + 2; } } } VÍ DỤ GỌI TỪ XA - SERVER Công khai hành vi cho điều khiển từ xa try { int port = 9955; HttpChannel httpc = new HttpChannel(port); // dang ky port + kenh o tren may ChannelServices.RegisterChannel(httpc); // dang ky dinh danh cho remote RemotingConfiguration RegisterWellKnownServiceType( typeof(remotechucnang),"serverremote01", WellKnownObjectMode.Singleton); } catch (Exception ex) {} Dịch ứng dụng Server thành tập tin chạy VÍ DỤ GỌI TỪ XA – INTERFACE OF SERVER Tạo lớp giao diện cho server, hay hành vi không nội dung Cùng tên với ứng dụng Server, tên namespace namespace server { [Serializable] public class phanso { public int ts, ms; public phanso() { ts = 0; ms = 1; } public phanso(int _ts, int _ms) { ts = _ts; ms = _ms; } } } VÍ DỤ GỌI TỪ XA – INTERFACE OF SERVER namespace server { public class remotechucnang : MarshalByRefObject { public remotechucnang() { } public phanso nhan(phanso p) { return null } public int cong(int x) { return 0; } } } Dịch giao diện Server thành DLL, chép DLL vào bên ứng dụng gọi (Client) VÍ DỤ GỌI TỪ XA - CLIENT Tìm kiếm hành vi cho điều khiển từ xa, nhận tham chiếu try { server.remotechucnang rem = (server.remotechucnang) Activator.GetObject( typeof(server.remotechucnang), “http://phvn:9955/serverremote01” ); server.phanso p = new server.phanso(3, 4); server.phanso p2 = rem.nhan(p); int x = rem.cong(8); } catch (Exception ex) {} ... lớp Serializable Bên bị điều khiển (Gọi nơi cung cấp hành vi cho điều khiển từ xa) Bên điều khiển (Gọi nơi đưa yêu cầu thực thi hành vi từ xa) ĐIỀU KHIỂN TỪ XA (REMOTING) Ứng dụng gọi (Client)... Bạn load nội dung từ dll người dùng chép vào (không cần đăng ký reference) ĐIỀU KHIỂN TỪ XA (REMOTING) Là chế kích hoạt đối tượng (hành vi) từ xa (ở máy khác) Lớp điều khiển từ xa bắt buộc phải...CẤU TRÚC (TYPE) Quản lý cấu trúc lớp (không có giá trị) Quản lý nội dung lệnh hành vi (mã nguồn) Cú pháp lấy cấu trúc typeof (kiểu _dữ_ liệu) Type.GetType(tên _dữ_ liệu) Đốitượng.GetType()