Text="5" runat="server"
195 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang Chương 17 Assemblies Versioning Đơn vị lập trình NET Assembly Một Assembly tập hợp tập tin mà người sử dụng, họ thấy tập tin DLL hay EXE .NET định nghĩa Assembly đơn vị có khả tái sử dụng (re-use), mang số hiệu phiên (versioning), bảo mật (security) cuối khả triển khai (deployment) Asssembly chứa đựng nhiều thành phần khác ngồi mã chương trình ứng dụng tài ngun (resource, ví dụ tập tin GIF), thông tin mô tả kiểu (type definition), siêu liệu (metadata) mã liệu 17.1 Tập tin PE Assembly lưu trữ dĩa từ theo dạng thức tập tin Portable Executable (PE) Dạng thức tập tin PE NET giống tập tin PE bình thường Windows NT Dạng thức PE cài đặt thành dạng thức tập tin DLL EXE Về mặt logic, assembly chứa đựng hay nhiều module Mỗi module tổ chức thành DLL đồng thời module cấu thành assembly Các module tự thân chúng chạy được, module phải kết hợp với thành assembly làm việc hữu ích 17.2 Metadata Metadata thông tin lưu trữ bên assembly với mục đích để mơ tả kiểu liệu, phương thức thông tin khác assembly Do có chứa metadata nên assembly có khả tự mô tả 17.3 Ranh giới an ninh Assembly tạo ranh giới an ninh (security boundary) Các kiểu liệu định nghĩa bên assembly bị giới hạn phạm vi ranh giới assembly Để sử dụng chung kiểu liệu assembly, cần phải định rõ tham chiếu (reference) IDE dòng lệnh 17.4 Số hiệu phiên (Versioning) Mỗi assembly có số hiệu phiên riêng Một “phiên bản” ám toàn nội dung assembly bao gồm kiểu liệu resource 17.5 Manifest Manifest thành phần metadata Manifest mơ tả assembly chứa gì, ví dụ như: thơng tin nhận dạng (tên, phiên bản), danh sách kiểu 196 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang liệu, danh sách resource, danh sách assembly khác assembly tham chiếu đến, … 17.5.1 Các module manifest Một assembly chứa nhiều module, manifest assembly cịn chứa mã băm (hash code) module lắp ghép thành assembly để bảo đảm thực thi, nạp module phiên Chỉ cần thay đổi rất nhỏ module mã băm thay đổi 17.5.2 Manifest module Mỗi module chứa riêng phần manifest mơ tả cho giống assembly chứa manifest mô tả cho assembly 17.5.3 Các assembly cần tham chiếu Manifest assembly chứa tham chiếu đến assembly khác Mỗi tham chiếu chứa đựng tên, phiên bản, văn hóa (culture), nguồn gốc (originator),… Thơng tin nguồn gốc chữ ký số (digital signature) lập trình viên hay cơng ty nơi cung cấp assembly mà assembly tham chiếu đến Văn hóa đối tượng chứa thơng tin ngơn ngữ, cách trình bày quốc gia Ví dụ cách thể ngày tháng: D/M/Y hay M-D-Y 17.6 Đa Module Assembly Một assembly đơn module assembly gồm module, module tập tin EXE DLL Manifest cho assembly đơn module nhúng vào module Một assembly đa module assembly bao gồm nhiều tập tin (ít tập tin EXE DLL) Manifest cho assembly đa module lưu trữ thành tập tin riêng biệt nhúng vào module 17.6.1 Lợi ích đa module assembly Nếu dự án có nhiều lập trình viên mà dự án xây dựng assembly, việc kiểm lỗi, biên dịch dự án,… “ác mộng” tất lập trình viên phải hợp tác với nhau, phải kiểm tra phiên bản, phải đồng hóa mã nguồn,… Nếu ứng dụng lớn xây dựng nhiều assembly, cần cập nhật (update) để sửa lỗi chẳng hạn, cần cập nhật / vài assembly mà Nếu ứng dụng lớn tổ chức từ nhiều assembly, có phần mã chương trình thường sử dụng / quan trọng thuộc vài assembly nạp vào nhớ, làm giảm bớt chi phí nhớ, tăng hiệu suất hệ thống 197 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang 17.7 Assembly nội (private assembly) Có loại Assembly: nội (private) chia sẻ (shared) Assembly nội dự định dùng cho ứng dụng, cịn assembly chia sẻ ngược lại, dùng cho nhiều ứng dụng Các assembly nội ghi dĩa từ thành tập tin EXE DLL thư mục với assembly thư mục thư mục chứa assembly Để thực thi máy khác cần chép cấu trúc thư mục đủ, không cần phải đăng ký với Registry 17.8 Assembly chia sẻ (shared assembly) Khi viết assembly control chẳng hạn, tác giả control có ý định chia sẻ cho lập trình viên khác anh / chị ta phải xây dựng assembly đáp ứng u cầu sau: • Assembly phải có tên “mạnh” (strong name) Tên mạnh có nghĩa chuỗi biểu diễn tên phải (globally unique) • Phải có thơng tin phiên để tránh tượng phiên “dẫm chân lên nhau” • Để chia sẻ assembly, assembly phải đặt vào nơi gọi Global Assembly Cache (GAC) Đây nơi quy định Common Language Runtime (CLR) dùng để chứa assembly chia sẻ 17.8.1 Chấm dứt “địa ngục DLL” Giả sử bạn cài đặt ứng dụng A lên máy chạy tốt Sau bạn cài đặt ứng dụng B, nhiên ứng dụng A khơng chịu hoạt động Sau q trình tìm hiểu, cuối nguyên nhân ứng dụng B cài phiên khác đè lên tập tin DLL mà ứng dụng A sử dụng Tình gọi “địa ngục DLL” Sự đời assembly chấm dứt tình trạng 17.8.2 Phiên Assembly chia sẻ NET định vị tên (unique) phiên Phiên biểu diễn số phân cách dấu ‘:’ ví dụ 1:2:6:1246 Số Số Số Số mô tả phiên (major version) thứ mơ tả phiên phụ (minor version) thứ mô tả thứ tự xây dựng (build) cuối mô tả lần xem xét cập nhật (revision) để sửa lỗi 198 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Assemblies Versioning Gvhd: Nguyễn Tấn Trần Minh Khang 17.8.3 Tên mạnh Một tên mạnh chuỗi ký tự hexa mang thuộc tính toàn cầu (globally unique) Ngoài chuỗi cịn mã hóa thuật tốn khóa công khai để bảo đảm assembly không bị thay đổi vơ tình hay cố ý Để tạo tên mạnh, cặp khóa cơng khai-bí mật tạo cho assembly Một mã băm (hash code) tạo từ tên, nội dung tập tin bên assembly chuỗi biểu diễn khóa cơng khai Sau mã băm mã hóa khóa bí mật, kết mã hóa ghi vào manifest Quá trình gọi ký xác nhận vào assembly (signing the assembly) Khi assembly CLR nạp vào nhớ, CLR dùng khóa cơng khai manifest giải mã mã băm để xác định xem assembly có bị thay đổi không 17.8.4 Global Assembly Cache (GAC) Sau tạo tên mạnh ghi vào assembly, việc lại để thực chia sẻ assembly đặt assembly vào thư mục GAC Đó thư mục đặc biệt dùng để chứa assembly chia sẻ Trên Windows, thư mục \WinNT\assembly Mã hóa khóa cơng khai – bí mật: thuật tốn mã hóa đặc biệt, dùng thuật tốn riêng tạo khóa, khóa phổ biến rộng rãi nên gọi khóa cơng khai, khóa cịn lại chủ nhân cất nơi an tồn nên gọi bí mật Sau dùng thuật tốn mã hóa để mã hóa liệu Một liệu bị mã hóa khóa liệu giải mã khóa ngược lại 199 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Chương 18 Attributes Reflection Xin nhắc lại ứng dụng NET bao gồm mã chương trình, liệu, metadata Metadata thơng tin liệu mà ứng dụng sử dụng kiểu liệu, mã thực thi, assembly,… Attributes chế để tạo metadata Ví dụ thị cho trình biên dịch, liệu khác liên quan đến liệu, phương thức, lớp, … Reflection trình ứng dụng đọc lại metadata để có cách thể hiện, ứng xử thích hợp cho người dùng 18.1 Attributes Một attribute đối tượng, đối tượng chứa mẩu liệu, mà lập trình viên muốn đính kèm với phần tử (element) ứng dụng Phần tử (element) mà lập trình viên muốn đính kèm attribute gọi mục tiêu (target) attribute Ví dụ attribute: [NoIDispatch] đính kèm với lớp hay giao diện để nói lớp đích (target class) nên thừa kế từ giao diện IUnknown thừa kế từ IDispatch 18.2 Attribute mặc định (intrinsic attributes) Có loại attribute: • Attribute mặc định: attribute CLR cung cấp sẵn • Attribute lập trình viên định nghĩa (custom attribute) 18.2.1 Đích Attribute Mỗi attribute ảng hưởng đến đích (target) mà khai báo Đích lớp, giao diện, phương thức … Bảng sau liệt kê tất đích Bảng 18-1 Các đích attribute Loại Ý nghĩa All Áp dụng cho tất cà loại bên Assembly Áp dụng cho assembly Class Áp dụng cho thể lớp ClassMembers Áp dụng cho loại từ sau hàng trở 200 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Constructor Áp dụng với hàm dựng Delegate Áp dụng cho delegate Enum Áp dụng cho kiểu liệt kê Event Áp dụng cho kiện Field Áp dụng cho biến thành viên (tĩnh lẫn không tĩnh) Interface Áp dụng cho giao diện Method Áp dụng cho phương thức Module Áp dụng cho module Parameter Áp dụng cho tham số Property Áp dụng cho property ReturnValue Áp dụng cho trị trả Struct Áp dụng cho cấu trúc 18.2.2 Áp dụng Attribute Lập trình viên áp dụng attribute lên mục tiêu cách đặt attribute ngoặc vng [] liền trước mục tiêu Ví dụ attribute “Assembly” áp dụng: [assembly: AssemblyDelaySign(false)] [assembly: AssemblyKeyFile(“keyfile.snk”)] Cách sau tương đương với cách trên: [assembly: AssemblyDelaySign(false), assembly: AssemblyKeyFile(“keyfile.snk”)] Attribute thường dùng lập trình C# “Serializable” [serializable] class MySerClass Attribute báo cho compiler biết lớp MySerClass cần bảo đảm việc ghi nội dung, trạng thát xuống dĩa từ hay truyền qua mạng 18.3 Attribute lập trình viên tạo Lập trình viên hoàn toàn tự việc tạo attribute riêng đem sử dụng chúng vào nơi cảm thấy thích hợp 18.3.1 Khai báo Attribute tự tạo Đầu tiên thừa kế lớp từ lớp System.Attribute: Public class XYZ : System.Attribute Sau báo cho compiler biết attribute đem áp dụng lên mục tiêu [AttributeUsage(AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] 201 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang Attribute “AttributeUsage” có mục tiêu áp dụng Attribute khác: gọi meta-attribute 18.3.2 Đặt tên attribute Lập trình viên hồn tồn tự việc đặt tên cho attribute Tuy nhiên, compiler NET có thêm khả tự nối thêm chuỗi “Attribute” vào tên Điều có nghĩa lập trình viên định nghĩa attribute có tên “MyBugFix” tìm kiếm truy xuất attribute trên, lập trình viên viết tên attribute: “MyBugFix” “MyBugFixAttribute” Nếu attribute có tên “MyBugFixAttribute” lập trình viên ghi tên attribute “MyBugFix” “MyBugFixAttribute” Ví dụ: [MyBugFix(123, "Jesse Liberty", "01/01/05", Comment="Off by one")] 18.3.3 Khởi tạo Attribute Mỗi attribute phải có contructor Attribute nhận kiểu đối số: kiểu vị trí (positional) kiểu tên (named) Trong ví dụ MyBugFix phần trước, phần tên ngày tháng kiểu vị trí, phần ghi (comment) kiểu tên Các đối số kiểu vị trí phải truyền vào contructor theo thứ tự khai báo Ví dụ: public BugFixAttribute(int bugID, string programmer, string date) { this.bugID = bugID; this.programmer = programmer; this.date = date; } Đối số kiểu tên cài đặt properties: public string Comment { get { return comment; } set { comment = value; } } 18.3.4 Sử dụng Attribute Một định nghĩa attribute, lập trình viên sử dụng cách đặt trước mục tiêu (target) Ví dụ: [BugFixAttribute(121,"Jesse Liberty","01/03/05")] BugFixAttribute(107,"Jesse Liberty","01/04/05", Comment="Fixed off by one errors")] public class MyMath Ví dụ áp dụng attribute MyBugFix vào lớp MyMath 202 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Attributes Reflection Gvhd: Nguyễn Tấn Trần Minh Khang 18.4 Reflection Để cho việc lưu attribute metadata có ích, cần phải có chế truy xuất chúng vào lúc chạy Các lớp vùng tên (namespace) Reflection, với lớp System.Type System.TypeReference, cung cấp hỗ trợ truy xuất metadata Reflection khái niệm chung cho thao tác thao tác sau đây: • Xem xét metadata • Tìm hiểu kiểu liệu (type discovery): lớp, interface, phương thức, đối số phương thức, properties, event, field, … • Nối kết trễ phương thức properties (late binding to methods and properties) • Tạo kiểu liệu lúc thực thi Lập trình viên định nghĩa assembly lúc chạy, lưu xuống dĩa từ để dùng lại 203 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang Chương 19 Marshaling Remoting Ngày nay, ứng dụng khơng cịn đơn gồm module, thực thi cần chạy process mà tập hợp nhiều thành phần (component) phức tạp Các thành phần khơng phân cách với ranh giới process mà cịn phân cách với qua ranh giới máy - mạng - máy Tiến trình di chuyển đối tượng vượt qua ranh giới (process, máy, …) gọi Remoting Tiến trình chuẩn bị để đối tượng thực remoting gọi Marshaling Giả sử đối tượng A nằm máy X muốn sử dụng dịch vụ đối tượng B nằm máy Y Để phục vụ đối tượng A, đối tượng B chuyển cho A đối tượng proxy Những yêu cầu từ đối tượng A proxy chuyển cho B, kết trả lời B gởi đến proxy, proxy gởi lại cho đối tượng A Giữa đối tượng A đối tượng B có nhiều đối tượng sink, cơng việc đối tượng sink áp đặt an ninh lên kênh liên lạc đối tượng Các thông điệp chuyển tải A B đối tượng channel Đối tượng channel lại yêu cầu giúp đỡ đối tượng formatter Công việc formatter định dạng lại thơng điệp để phía hiểu (ví dụ chuyển mã hóa endian dãy byte) 19.1 Miền Ứng Dụng (Application Domains) Theo lý thuyết, process ứng dụng thực thi (đang chạy) Mỗi application thực thi process riêng Nếu máy có Word, Excel, Visual Studio tương ứng máy có process Bên process, NET chia nhỏ thành phần nhỏ gọi miền ứng dụng (Application Domains viết tắt app domains) Có thể xem miền ứng dụng process “nhẹ cân”, miền ứng dụng hành xử y process điểm khác biệt sử dụng tài ngun process Các miền ứng dụng process khởi động (started) hay bị treo (halted) độc lập với Miền ứng dụng cung cấp khả chịu lỗi (fault tolerance); khởi động đối tượng miền ứng dụng khác với miền ứng dụng đối tượng vừa khởi động gây lỗi, làm crash miền ứng dụng khơng làm crash tồn ứng dụng Mỗi process lúc bắt đầu thực thi có miền ứng dụng ban đầu (initial app domain) tạo thêm nhiều miền ứng dụng khác lập trình viên muốn Thơng thường, ứng dụng cần miền ứng dụng đủ Tuy nhiên, ứng dụng lớn cần sử dụng thư viện người khác viết mà thư viện khơng 204 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang tin cậy cần tạo miền ứng dụng khác dùng để chứa thư viện khơng tin cập đó, tách thư viện khỏi miền ứng dụng để lập lỗi, lỗi xảy khơng làm crash ứng dụng Miền ứng dụng khác với thread Một thread chạy bên miền ứng dụng Trong miền ứng dụng tồn nhiều thread 19.1.1 Marshaling vượt qua biên miền ứng dụng Marshaling trình chuẩn bị đối tượng để di chuyển qua ranh giới Marshaling tiến hành theo cách: giá trị (by value) tham chiếu (by reference) • Khi đối tượng marshaling giá trị, đối tượng tạo truyền đến nơi nhận Những thay đổi không làm thay đổi đối tượng gốc ban đầu • Khi đối tượng marshaling tham chiếu, đối tượng đặc biệt gọi proxy gởi đến nơi nhận Những thay đổi, lời gọi hàm đối tượng proxy chuyển cho đối tượng ban đầu xử lý 19.1.1.1 Tìm hiểu marshaling proxy Khi marshaling đối tượng reference, NET CLR cung cấp cho đối tượng thực lời gọi từ xa đối tượng proxy “trong suốt” (transparent proxy - TP) Công việc đối tượng TP nhận tất thơng tin liên quan đến việc gọi hàm (giá trị trả về, thông số nhập, …) từ stack đóng gói vào đối tượng riêng mà đối tượng cài đặt giao diện IMessage Sau đối tượng IMessage trao cho đối tượng RealProxy RealProxy lớp sở trừu tượng (abstract base class) mà từ đối tượng proxy thừa kế Lập trình viên tự tạo đối tượng proxy thừa kế từ RealProxy Đối tượng proxy mặc định hệ thống trao IMessage cho chuỗi đối tượng sink Số lượng sink phụ thuộc vào số lượng sách bảo an (policy) mà nhà quản trị muốn trì, nhiên đối tượng sink cuối đối tượng đặt IMessage vào Channel Channel chia thành channel phía client channel phía server, cơng việc channel di chuyển thông điệp (message) vượt qua ranh giới (boundary) Channel chịu trách nhiệm tìm hiểu nghi thức truyền thông (transport protocol) Định dạng thật thông điệp di chuyển qua ranh giới quản lý formatter Khung ứng dụng (framework) NET cung cấp formatter: • Simple Object Access Protocol (SOAP) dùng cho HTTP channel • Binary dùng cho TCP/IP channel Lập trình viên tạo đối tượng formatter riêng muốn tạo channel riêng 205 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang Một message vượt qua ranh giới, nhận channel formatter phía server Channel phía server tái tạo lại đối tượng IMessage, sau channel phía server trao đối tượng IMessage cho hay nhiều đối tượng sink phía server Đối tượng sink cuối chuỗi sink đối tượng StackBuilder, công việc StackBuilder nhận IMessage tái tạo lại stack frame để thực lời gọi hàm 19.1.1.2 Chỉ định phương pháp Marshaling Một đối tượng bình thường hồn tồn khơng có khả marshaling Để marshaling đối tượng giá trị (by value), cần đánh dấu attribute Serializable lúc định nghĩa đối tượng [Serializable] public class Point Để marshaling đối tượng tham chiếu (by reference), đối tượng cần thừa kế từ MarshalByRefObject public class Shape : MarshalByRefObject 19.2 Context Miền ứng dụng (app domain) đến lượt lại chia thành context Context xem ranh giới mà đối tượng bên context có quy tắc sử dụng (usage rules) Các quy tắc sử dụng như: đồng hóa giao dịch (synchronization transaction), … 19.2.1 Đối tượng loại Context-Bound Context-Agile Các đối tượng Context-Bound Context-Agile Nếu đối tượng Context-Bound, chúng tồn context riêng, giao tiếp lẫn nhau, thông điệp chúng marshaling để vượt qua biên context Nếu đối tượng Context-Agile, chúng hoạt động bên context đối tượng yêu cầu (calling) Do đó, đối tượng A triệu gọi phương thức đối tượng B, phương thức B thực thi bên context A Vì việc marshaling không cần thiết Giả sử đối tượng A cần giao tiếp với sở liệu, giả sử đối tượng A có thiết lập giao dịch (transaction) Do A cần tạo context Tất phương thức A thực thi context transaction Giả sử có đối tượng B khác thuộc loại context-agile Giả sử đối tượng A trao tham chiếu sở liệu cho đối tượng B triệu gọi phương thức X B Lại giả sử phương thức X B mà A triệu gọi lại gọi phương thức Y khác A Bởi B thuộc loại context-agile phương thức X B thực thi context đối tượng A Vì context A có bảo vệ giao 206 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang dịch nên A có roll-back sở liệu thay đổi mà phương thức X B lên sở liệu roll-back Giả sử đối tượng C triệu gọi phương thức Z B, phương thức Z có thực thay đổi sở liệu, B thuộc loại Context-Agile nên Z thực thi context C Vì thay đổi mà Z thực lên sở liệu roll-back Nếu B thuộc loại Context-Bound, A tạo B, context B thừa kế từ context A Khi C triệu gọi phương thức Z B, lời triệu gọi marshaling tử context C đến context B thực context B (thừa kế từ A) Do phương thức Z thực thi bảo vệ transaction Những thay đổi mà Z thực lên sở liệu rooll-back Một đối tượng có lựa chọn Context: • Context-Agile • Context-Bound khơng định attribute Thực cách thừa kế từ ContextBoundObject Phương thức đối tượng thuộc loại thực thi Context thừa kế từ Context đối tượng tạo • Context-Bound có định attribute Context Các phương thức hoạt động Context tạo riêng 19.2.2 Marshaling vượt qua ranh giới Context Khi truy cập đối tượng Context-Agile miền ứng dụng không cần proxy Khi đối tượng A context truy cập đối tượng ContextBound B context khác, đối tượng A truy cập đối tượng B thông qua proxy B Đối tượng marshaling khác vượt qua ranh giới context phụ thuộc vào cách tạo ra: • Đối tượng bình thường khơng có marshaling; bên miền ứng dụng đối tượng thuộc loại context-agile • Đối tượng có đánh dấu attribute Serializable thuộc loại context-agile marshaling giá trị (by value) vượt qua ranh giới miền ứng dụng • Đối tượng thừa kế từ MarshalByRefObject thuộc loại context-agile marshaling tham chiếu (by reference) vượt qua ranh giới miền ứng dụng • Đối tượng thừa kế từ ContextBoundObject marshaling tham chiếu vượt qua ranh gới miền ứng dụng ranh giới context 207 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Marshaling Remoting Gvhd: Nguyễn Tấn Trần Minh Khang 19.3 Remoting Cùng với việc marshaling đối tượng vượt qua ranh giới context miền ứng dụng, đối tượng marshaling vượt qua ranh giới process chí qua ranh giới máy - mạng - máy Khi đối tượng marshaling vượt qua ranh giới process hay máy - mạng – máy, gọi Remoted 19.3.1 Tìm hiểu kiểu liệu phía Server Có kiểu đối tượng phía server phục vụ cho việc Remoting NET: tiếng (well-known) client kích hoạt (client activated) Kênh liên lạc với đối tượng tiếng thiết lập client gởi thông điệp (message) Kênh liên lạc khơng giữ thường trực trường hợp đối tượng client kích hoạt Đối tượng tiếng chia thành loại nhỏ: singleton single-call • Đối tượng tiếng kiểu singleton: tất thông điệp từ client gởi đến đối tượng phân phối (dispatch) cho đối tượng chạy server Đối tượng tạo server khởi động nằm chờ server để phục vụ cho client Vì đối tượng loại phải có contructor khơng tham số • Đối tượng tiếng kiểu single-call: thông điệp từ client gởi giải đối tượng Mơ hình thường dùng để cân tải hệ thống Đối tượng client kích hoạt thường sử dụng lập trình viên có cơng việc tạo server riêng phục vụ cho việc lập trình, đối tượng client kích hoạt trì kết nối với client toàn yêu cầu client đáp ứng 19.3.2 Mô tả server Interface Sau ví dụ xây dựng lớp máy tính (calculator) với chức Tạo tập tin ICalc.cs với nội dung namespace Programming_CSharp using System; public interface ICalc { double Add(double x, double y); double Sub(double x, double y); double Mult(double x, double y); double Div(double x, double y); } Tạo project kiểu C# Class Library, mở menu Build, lệnh Build Kết tập tin Icalc.DLL 208 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com ... c? ?o ứng dụng minh họa cho vi? ?c tìm hiểu Tên ứng dụng Xây dựng Website dạy h? ?c C# Đây ứng dụng Web c? ?i đặt ngơn ngữ C# ASP.NET Trong ASP.NET dùng để xây dựng giao diện tương t? ?c với người dùng; c? ??n... Basic, … Đề tài đặt trọng tâm giới thiệu ngôn ngữ C# c? ?ch dùng c? ?ng c? ?? lập trình tảng NET Với ngơn ngữ C+ +, h? ?c ta không c? ??n quan tâm đến môi trường th? ?c thi Với ngôn ngữ C# , ta h? ?c để tạo ứng dụng. .. viện ph? ?c vụ cho vi? ?c xây dựng ứng dụng web, dịch vụ web ứng dụng Windows; c? ??n c? ? CLR - Common Language Runtime: (ngôn ngữ th? ?c thi dùng chung) để th? ?c thi đối tượng xây dựng bơ khung Một tập