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();
16 trang |
Chia sẻ: Mr Hưng | Lượt xem: 860 | Lượt tải: 0
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:
- 6_remoting_13092010_8154.pdf