Điều khiển từ xa (remoting) - Hệ quản trị cơ sở dữ liệu II

Quản lý cấu trúc của lớp (không có giá trị)

 Quản lý nội dung lệnh của các 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 = typeof(int);

 Type t = Type.GetType(“System.String”);

 ChuNhat cn = new ChuNhat();

Type t = cn.GetType();

pdf16 trang | Chia sẻ: Mr Hưng | Lượt xem: 848 | Lượt tải: 0download
Nội dung tài liệu Điều khiển từ xa (remoting) - Hệ quản trị cơ sở dữ liệu II, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU II Phan Hiền ĐIỀU KHIỂN TỪ XA (REMOTING) CẤU TRÚC (TYPE)  Quản lý cấu trúc của lớp (không có giá trị)  Quản lý nội dung lệnh của các 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 = typeof(int);  Type t = Type.GetType(“System.String”);  ChuNhat cn = new ChuNhat(); Type t = 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 của các hành vi.  Ảnh này được tạo bởi từ cấu trúc của lớp (đương nhiên không có giá trị các thuộc tính – vì là lớp).  Một đối tượng thật được hình thành từ cấu trúc (cùng ảnh của lớp) và giá trị của các 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 cả các đối tượng.  Mọi lớp đều được kế thừa từ lớp Object. Mọi đối tượng đều có thể ép về Object để lưu giá trị mà không thể hiện rỏ cấu trúc chính xác. ACTIVATOR  Lớp tạo dữ liệu đối tượng từ cấu trúc với ảnh của 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ả về object (đối tượng theo lớp Object, lưu dữ liệu nhưng không thể hiện cấu trúc theo lúc tạo một 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ố thì kết quả là “chao chao ” Nếu khởi tạo có tham số thì kết quả là “chao chao chao chao chao ” ẢNH (REFLECTION) - INVOKE  Hàm Invoke dùng để gọi nội dung lệnh của hàm với đối tượng có dữ liệu.  Cơ chế thực thi này hào toàn dựa vào cấu trúc (ảnh của hành vi) và đối tượng dữ liệu tổng quan (object, do Activator tạo ra). Điều này tạo nên một hình thức gọi hàm mới với các tham số chủ yếu là chuỗi định danh. Người ta gọi đây là gọi hàm qua ảnh của hàm. ASSEMBLY  Dùng để load nội dung từ một tập tin dll.  Lấy ra cấu trúc từ Assembly  Tạo được đối tượng từ Assembly. Dùng hàm CreateInstance() Ví dụ: Assembly ass = Assembly.LoadFrom("aaa.dll"); Type t = ass.GetType(); Bạn có thể load nội dung từ dll do người dùng chép vào (không cần đăng ký reference) ĐIỀU KHIỂN TỪ XA (REMOTING)  Là cơ chế kích hoạt đối tượng (hành vi) từ xa (ở một máy khác).  Lớp được điều khiển từ xa bắt buộc phải kế thừa lớp đặc biệt MarshalByRefObject.  Đối tượng trong tham số hàm bắt buộc phải có sự kế thừa lớp Serializable.  Bên bị điều khiển (Gọi là nơi cung cấp hành vi cho điều khiển từ xa).  Bên điều khiển (Gọi là nơi đưa yêu cầu thực thi hành vi từ xa) ĐIỀU KHIỂN TỪ XA (REMOTING) Bên bị điều khiển - Server Lớp cho Remote (MarshalByRefObject) • Hành vi cho remote • Hành vi cho remote Giao diện (Interface) Dll (Hàm không nội dung) Nền .NetỨng dụng gọi (Client) Phải có các giao diện Dll (Hàm không nội dung) Công khai bên ngoài qua: + Định danh mạng + Cổng giao tiếp (Port) + Tên riêng của Server Công khai Tìm kiếm Gọi từ xa Nhận kết quả 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 các 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, cùng 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 về tham chiếu. try { server.remotechucnang rem = (server.remotechucnang) Activator.GetObject( typeof(server.remotechucnang), “” ); server.phanso p = new server.phanso(3, 4); server.phanso p2 = rem.nhan(p); int x = rem.cong(8); } catch (Exception ex) {}

Các file đính kèm theo tài liệu này:

  • pdf6_remoting_13092010_8154.pdf