Tổng quan về kiến trúc hướng dịch vụ
Giới thiệu bài toán
Hiện nay, việc ứng dụng công nghệ WCF trong giảng dạy và lập trình tại Việt Nam còn hạn chế WCF là một công nghệ nền tảng tích hợp nhiều mô hình lập trình giao tiếp trong NET 2.0 thành một mô hình duy nhất, phục vụ cho lập trình hướng dịch vụ Với những ưu điểm vượt trội so với các công nghệ phân tán truyền thống, việc áp dụng WCF có thể mang lại nhiều lợi ích, bao gồm giảm chi phí phát triển phần mềm, tiết kiệm thời gian và nguồn nhân lực, đồng thời nâng cao hiệu suất thực thi.
Công ty DKT là một công ty cổ phần chuyên phát triển ứng dụng website thương mại điện tử, tin tức và thanh toán trực tuyến Một số sản phẩm tiêu biểu của công ty bao gồm: www.bizweb.vn (nền tảng thương mại điện tử), www.baokim.vn (dịch vụ thanh toán trực tuyến), www.doanhnhan.net (báo điện tử dành cho doanh nhân), www.lamsao.com (trang giải đáp thắc mắc trong cuộc sống) và www.bizmail.vn (dịch vụ Email Marketing, quảng bá sản phẩm qua email).
Công ty hiện có các phòng ban như hành chính-kế toán, nhân sự, kỹ thuật, kinh doanh và biên tập, mỗi phòng ban đảm nhận chức năng riêng Việc quản lý nhân viên và quy trình dự án trong công ty phần mềm là thách thức lớn, đặc biệt khi thiếu quy trình chung và quản lý đầu mối Để giúp công ty DKT quản lý hiệu quả các vấn đề phát sinh trong công tác quản lý nhân sự và công việc nội bộ, tôi đã chọn nghiên cứu về công nghệ WCF (Windows Communication Foundation) và ứng dụng của nó trong quản lý công ty.
Các vấn đề chính cần giải quyết:
Tìm hiểu mô hình, kiến trúc hướng dịch vụ
Các công nghệ phân tán ra đời trước khi xuất hiện WCF
Công nghệ WCF (Windows Communication Foundation) cung cấp một nền tảng mạnh mẽ cho việc xây dựng và triển khai các dịch vụ giao tiếp giữa Client và Server Nó bao gồm các khái niệm cơ bản như cấu trúc dịch vụ, quy trình hoạt động giao tiếp, và các giao thức truyền thông Bên cạnh đó, WCF cũng chú trọng đến các vấn đề an ninh và bảo mật, đảm bảo dữ liệu được bảo vệ trong quá trình trao đổi Hệ thống quản lý lỗi trong WCF giúp phát hiện và xử lý các sự cố một cách hiệu quả, nâng cao độ tin cậy của các ứng dụng.
Xây dựng ứng dụng quản lý nội bộ dựa trên công nghệ WCF, nghiên cứu quy trình hoạt động của các phòng ban tại công ty DKT, xác định chức năng và nhiệm vụ của từng nhân viên, cũng như các công việc chính trong một công ty công nghệ Từ đó, phát triển giải pháp tối ưu nhằm nâng cao hiệu quả quản lý.
Trong chương trình này tôi sẽ áp dụng các công nghệ mới của Microsoft như: công nghệ ASP.NET 2.0, XMScripting , WCF, Gadget trên nền tảng VisualStudio
Lịch sử hình thành và tương lai phát triển của kiến trúc hướng dịch vụ 10 1.3 Khái niệm, đặc trưng, tính chất của lập trình hướng dịch vụ
Tên gọi đầu tiên của lập trình hướng dịch vụ là “dịch vụ dựa trên hệ thống phân phối”
SOA, hay Kiến trúc Dịch vụ, là kỹ thuật phân chia chức năng thành các dịch vụ tương thích có thể được truy cập qua các API mạng Mặc dù thường được coi là một "ý tưởng mới" xuất hiện vào cuối những năm 90, thực tế là khái niệm này đã được nghiên cứu và phát triển từ đầu những năm 80.
Hình 1: Kiến trúc hướng dịch vụ SOA
Dịch vụ đại diện cho sự tiến hóa tiếp theo từ các thành phần, với SOA là phương pháp tối ưu để phát triển ứng dụng phân tán, giúp nâng cao năng suất, khả năng bảo trì, mở rộng và tái sử dụng.
Dịch vụ được đặc trưng bởi ngôn ngữ và công nghệ như NET FX và J2EE, cùng với các nền tảng như Windows và phiên bản cụ thể (Major.Minor.Build.Revision) Các dịch vụ này có sự phụ thuộc vào tiêu chuẩn và giao thức như HTTP, MSMQ, IPC, cũng như các chính sách liên quan đến giao dịch và độ tin cậy Hơn nữa, hợp đồng dịch vụ được xác định qua WSDL và tin nhắn được truyền tải qua SOAP.
SOA (Kiến trúc hướng dịch vụ) tuân thủ các nguyên lý quan trọng như: xác định rõ ràng các ranh giới giữa các dịch vụ, đảm bảo tính tự trị của từng dịch vụ, chia sẻ lược đồ và hợp đồng, và khả năng tương thích dựa trên các chính sách đã định.
1.3 Khái niệm, đặc trưng, tính chất của lập trình hướng dịch vụ
Phần mềm ngày càng phức tạp, vượt quá khả năng kiểm soát của các mô hình phát triển hiện tại Kiến trúc phần mềm SOA được kỳ vọng sẽ là giải pháp hiệu quả để giải quyết vấn đề này.
SOA, viết tắt của Kiến trúc Hướng Dịch vụ, là một mẫu kiến trúc dùng để xây dựng các hệ thống phân tán Nó phân phát các chức năng dưới dạng dịch vụ, cho phép người dùng cuối tích hợp vào ứng dụng của mình hoặc xây dựng dịch vụ mới SOA hỗ trợ tạo ra các giải pháp nhanh chóng và dễ dàng thông qua việc tích hợp các dịch vụ đã có sẵn.
Dịch vụ đóng vai trò then chốt trong kiến trúc SOA, với các hàm chức năng (mô-đun phần mềm) thực hiện quy trình nghiệp vụ SOA kết nối các dịch vụ một cách linh hoạt, cho phép các ứng dụng giao tiếp mà không cần biết chi tiết kỹ thuật bên trong Đây là cấp độ phát triển ứng dụng cao hơn, tập trung vào quy trình nghiệp vụ và sử dụng giao tiếp chuẩn để ẩn đi sự phức tạp kỹ thuật.
SOA tách biệt phần thực hiện dịch vụ với giao tiếp gọi dịch vụ, tạo ra một giao tiếp đồng nhất cho ứng dụng Client, cho phép sử dụng dịch vụ bất kể công nghệ thực hiện Thay vì phát triển các ứng dụng lớn và phức tạp, các nhà phát triển có thể xây dựng các dịch vụ nhỏ gọn, dễ triển khai và tái sử dụng trong toàn bộ quy trình nghiệp vụ Điều này không chỉ cải thiện khả năng tái sử dụng phần mềm mà còn tăng cường tính linh hoạt, cho phép nhà phát triển nâng cấp dịch vụ mà không ảnh hưởng đến ứng dụng Client.
Ưu, nhược điểm của lập trình hướng dịch vụ
Ưu điểm nổi bật của SOA là khả năng kết nối linh hoạt thông qua việc chuẩn hóa giao tiếp và tái sử dụng dịch vụ Các dịch vụ này có thể hoạt động với các trình khách trên mọi nền tảng và được phát triển bằng bất kỳ ngôn ngữ lập trình nào.
SOA dựa trên 2 nguyên tắc thiết kế quan trọng:
Mô-đun: Tách vấn đề lớn thành nhiều vấn đề nhỏ Đóng gói: Che đi dữ liệu và lô-gic trong từng modul đối với truy cập từ ngoài
Nhiều hệ thống phần mềm hiện nay đang trở nên phức tạp, dẫn đến chi phí phát triển và bảo trì cao, đặc biệt là với các hệ thống cao cấp Mặc dù các kiến trúc phần mềm đã cố gắng giải quyết vấn đề này, nhưng độ phức tạp vẫn gia tăng, vượt quá khả năng xử lý của các kiến trúc truyền thống Nguyên nhân một phần là do sự xuất hiện của nhiều công nghệ mới và yêu cầu tương tác giữa các hệ thống Các tổ chức CNTT vẫn phải đáp ứng nhanh chóng các yêu cầu mới trong khi giảm chi phí và tích hợp các thành phần mới Điều này tạo ra áp lực lớn cho các nhà phát triển phần mềm Mặc dù đã có nhiều kiến trúc như OOP, COM/DCOM, và CORBA, chưa có giải pháp hoàn chỉnh nào Hiện tại, SOA được kỳ vọng sẽ cách mạng hóa kiến trúc phần mềm với ưu điểm là hệ thống uyển chuyển, dễ dàng tạo ra các xử lý nghiệp vụ từ dịch vụ có sẵn và khả năng tương tác cao giữa các dịch vụ.
Nhược điểm: Hệ thống phức tạp và khó miêu tả dữ liệu không cấu trúc trong header của tin nhắn
Lợi ích khi sử dụng SOA[1,2,4]
Độc lập hệ thống : dịch vụ không phụ thuộc vào hệ thống và mạng cụ thể
Khả năng tái sử dụng
Khả năng hồi đáp thích nghi tốt và nhanh hơn để đáp ứng với sự thay đổi về yêu cầu giao dịch
Cho phép dễ dàng triển khai chương trình, môi trường chạy và quản lý dịch vụ dễ dàng hơn
Kiến trúc kết nối lỏng lẻo cho phép tích hợp dễ dàng các thành phần, chương trình, tiến trình và dịch vụ phức tạp từ những dịch vụ đơn giản.
Cho phép Client tìm kiếm và kết nối với những dịch vụ động khác
Những sự xác nhận và chứng minh của Client về tính năng bảo mật dựa trên giao tiếp dịch vụ tốt hơn cơ chế kết nối chặt chẽ
So sánh SOA và OOP[16]
SOA (Kiến trúc hướng dịch vụ) cho phép kết nối lỏng lẻo giữa các dịch vụ, trong khi OOP (Lập trình hướng đối tượng) dựa vào các lớp đã được định nghĩa sẵn, dẫn đến việc các đối tượng kết nối chặt chẽ với nhau.
Dịch vụ sử dụng tin nhắn để mô tả thông tin và thực hiện chức năng của mình, trong khi lập trình hướng đối tượng (OOP) sử dụng các hàm API để mô tả các đối tượng.
Phạm vi hoạt động của các dịch vụ trong SOA rộng lớn hơn là các đối tượng của OOP
SOA khuyến khích thiết kế các dịch vụ phi trạng thái, giúp kết nối lỏng lẻo giữa các dịch vụ, trong khi OOP tập trung vào việc liên kết dữ liệu một cách logic để tạo ra các đối tượng có trạng thái OOP cũng khuyến khích việc kế thừa, dẫn đến sự liên kết chặt chẽ giữa các đối tượng.
RPC
Thủ tục gọi hàm từ xa (RPC) là một kỹ thuật tiên tiến giúp kết nối giữa Client và Server, cho phép Client truy cập và sử dụng các ứng dụng cũng như dịch vụ một cách hiệu quả.
Dịch vụ sử dụng cổng động thường nằm trên các máy tính khác trong hệ thống mạng máy tính hiện nay Nhiều ứng dụng và dịch vụ, như quá trình đồng bộ của các Domain Controller trong Active Directory hay MS Outlook kết nối với MS Exchange Server, đều áp dụng cơ chế kết nối RPC.
IDL
IDL là ngôn ngữ tiêu chuẩn để mô tả giao diện của các thành phần Nó rất hữu ích trong việc gọi các thành phần trên máy tính khác thông qua RPC, cho phép tương tác giữa các nền tảng và ngôn ngữ khác nhau mà không cần chia sẻ ngữ nghĩa cuộc gọi.
SOAP
SOAP là một giao thức tương tự như HTTP-Get và HTTP-Post, được xây dựng trên nền tảng XML Đây là một trong những giao thức tiêu chuẩn cho việc phát triển Web Services, dựa trên ý tưởng gọi hàm từ xa (RPC - Remoting Procedure Call) trên hệ thống Internet Ứng dụng có thể yêu cầu dịch vụ bằng cách gửi và nhận các SOAP envelope, và nhờ vào nền tảng XML, SOAP rất phù hợp cho môi trường phân tán.
SOAP là một đặc tả sử dụng tài liệu XML để trao đổi thông tin có cấu trúc trong môi trường phân tán Nó không quy định ngữ nghĩa ứng dụng hay cách cài đặt chi tiết, mà cung cấp một cơ chế đơn giản cho việc giao tiếp giữa các thành phần khác nhau Được thiết kế nhằm giảm chi phí tích hợp hệ thống trên nhiều nền tảng, SOAP định nghĩa một mô hình trao đổi dữ liệu dựa trên ba khái niệm cơ bản: thông điệp dưới dạng tài liệu XML, quá trình truyền tải từ bên gửi đến bên nhận, và khả năng chuyển tiếp dữ liệu đến nơi khác.
Mô hình SOAP sử dụng tài liệu XML làm thông điệp trao đổi, mang lại nhiều ưu điểm so với các giao thức truyền dữ liệu khác Các thông điệp XML có thể dễ dàng tổng hợp và đọc bằng một trình soạn thảo văn bản đơn giản, cho phép làm việc với XML trên hầu hết mọi nền tảng Dưới đây là một ví dụ về thông điệp SOAP.
Trong trao đổi thông điệp SOAP, hai thành phần chính là bên gửi và bên nhận, với thông điệp được chuyển từ bên này sang bên kia Mặc dù mô hình này đơn giản, nhưng nó là nền tảng để phát triển các phương thức trao đổi phức tạp hơn Cấu trúc của một thông điệp SOAP bao gồm các phần: , và , trong đó là thành phần gốc Thành phần cho phép bổ sung các tính năng vào thông điệp, với mỗi phần tử trong được gọi là Header Entry, giúp diễn giải và quy định ngữ nghĩa của thông điệp Các ứng dụng có thể xử lý và định tuyến thông điệp dựa trên thông tin trong và nội dung của thông điệp, điều này mang lại lợi thế so với các mô hình kiến trúc như DCOM, CORBA và RMI, nơi mà các protocol header phải được chỉ định chi tiết cho từng ứng dụng.
WSDL
Ngôn ngữ mô tả dịch vụ Web (WSDL) là một đặc tả chi tiết tiêu chuẩn cho dịch vụ Web dựa trên SOAP Khi kết hợp với các công cụ thích hợp, WSDL cho phép ứng dụng trích xuất thông tin cần thiết từ tệp mà không cần biết dịch vụ Web đang tìm kiếm gì Khách hàng có thể đọc WSDL để xác định các hợp đồng có sẵn trên dịch vụ Web.
WSDL là ngôn ngữ mô tả giao diện (IDL) cho các dịch vụ web, cung cấp thông tin cần thiết để tạo đối tượng proxy trong thời gian thiết kế Khách hàng sử dụng đối tượng proxy này trong thời gian chạy để gửi và nhận thông tin SOAP từ các dịch vụ.
WSDL (Web Services Description Language) là một lược đồ XML mô tả cấu trúc dịch vụ, cung cấp thông tin cho hệ thống phân tán và cho phép ứng dụng tự động trao đổi với nhau Trong khi SOAP (Simple Object Access Protocol) tập trung vào việc trao đổi thông tin giữa bên yêu cầu và bên cung cấp, WSDL mô tả dịch vụ mà bên cung cấp cung cấp, được coi như công thức để tạo ra các thông điệp SOAP cho các dịch vụ.
Tài liệu WSDL mô tả một Web Service qua các đối tượng trừu tượng được gọi là “ports” và “endpoint” Nó cũng xác định các hành vi, tương ứng với “operation”, cùng với dữ liệu liên quan.
Một "message" bao gồm các hành vi liên quan được tổ chức thành một "contract" Một ràng buộc kết nối (binding) xác định giao thức mạng và định dạng dữ liệu cho một contract cụ thể Tiếp theo, một địa chỉ được xác định bằng cách kết hợp một địa chỉ mạng với một binding Nếu một Client có tài liệu WSDL và tìm thấy binding cùng địa chỉ cho mỗi port, nó có thể gọi các phương thức của dịch vụ theo đúng giao thức và định dạng dữ liệu đã được chỉ định.
Phần tử gốc của tài liệu WSDL là , bao gồm sáu thành phần chia thành hai nhóm: thông tin trừu tượng và thông tin cụ thể Nhóm thông tin trừu tượng bao gồm types, messages và porttype, trong khi nhóm thông tin cụ thể bao gồm bindings và services Các thành phần này chứa những tham chiếu lẫn nhau, tạo nên cấu trúc liên kết chặt chẽ trong đặc tả WSDL.
UDDI
Về cơ bản UDDI là một nơi mà các tổ chức đăng ký và tìm kiếm các web service
Nó đóng vai trò như service broker cho phép người sử dụng dịch vụ tìm đúng nhà cung cấp dịch vụ cần tìm [4] UDDI hỗ trợ chức năng:
UDDI (Universal Description, Discovery, and Integration) cho phép tìm kiếm và định vị các doanh nghiệp cung cấp dịch vụ hoặc sản phẩm theo vùng địa lý Thông tin về nhà cung cấp bao gồm địa chỉ, thông tin liên lạc và các định danh cần thiết Bên cạnh đó, UDDI cung cấp thông tin kỹ thuật về dịch vụ web mà doanh nghiệp cung cấp, bao gồm cách sử dụng dịch vụ Để sử dụng các dịch vụ của UDDI, nó cung cấp một tập hàm API dưới dạng SOAP Web Service, chia thành hai phần: Inquiry API dùng để truy vấn và Publisher’s API dùng để đăng ký Inquiry API bao gồm hai phần con: một phần cho phép tìm kiếm và duyệt thông tin trên UDDI registry, và phần còn lại xử lý lỗi triệu gọi.
Bộ đăng ký UDDI là thành phần chính trong việc xử lý, đóng vai trò như một file XML để mô tả thực thể kinh doanh và các dịch vụ web liên quan Doanh nghiệp sử dụng dịch vụ UDDI để đăng ký thông tin về các web service mà họ cung cấp Thông tin này được thêm vào UDDI registry thông qua trang web hoặc bằng các công cụ lập trình tuân theo các đặc tả đã định.
REST
REST là một phương pháp hiệu quả để truy cập nội dung thông tin từ trang web thông qua việc đọc tệp XML mô tả nội dung mong muốn Thay vì sử dụng các cơ chế phức tạp như CORBA, RPC hay SOAP, REST tận dụng giao thức HTTP để thực hiện các cuộc gọi giữa các máy Phương pháp này hỗ trợ tất cả bốn thao tác CRUD (Tạo / Đọc / Cập nhật / Xóa) một cách đơn giản và trực quan.
Tổng quan công nghệ WCF
Lịch sử hình thành
WCF là một API thiết kế cho ứng dụng phân tán theo kiến trúc SOA, hỗ trợ tính toán phân tán qua nguyên tắc kiến trúc hướng dịch vụ Các dịch vụ trong WCF được liên kết và thường có giao diện WSDL, cho phép khách hàng WCF dễ dàng truy cập và sử dụng, bất kể nền tảng lưu trữ dịch vụ WCF còn cung cấp nhiều dịch vụ web tiêu chuẩn tiên tiến như WS-Addressing, WS-ReliableMessaging và WS-Security.
WCF được tích hợp trong NET Framework 3.0 vào năm 2006, và với phiên bản NET Framework 3.5 ra mắt năm 2007, Microsoft đã phát hành bộ mã hóa bổ sung hỗ trợ định dạng tuần tự JSON, phục vụ cho nhu cầu AJAX trên các trang web.
WCF, hay Windows Communication Foundation, là một thành phần quan trọng trong NET Framework 3.0, trước đây được biết đến với tên gọi WinFX Nó tương thích với các hệ điều hành như Windows Vista, Windows 2003 và Windows XP, đồng thời hỗ trợ các phiên bản tương lai của Windows Server.
Các API của WCF thống nhất các dịch vụ web ASMX., NET Remoting,… thành một mô hình lập trình duy nhất (trong khi đảm bảo khả năng tương tác)
Hình 3: Các thành phần cơ bản trong WCF
Các công nghệ trước
Microsoft phát triển COM để cho phép các ứng dụng tương tác và thúc đẩy tái sử dụng Lợi ích của COM là khả năng tương tác giữa các thành phần phát triển bằng các ngôn ngữ khác nhau thông qua các tiêu chuẩn chung Nhiều sản phẩm của Microsoft, như Microsoft Office, SQL Server và Windows, đều dựa trên COM Tuy nhiên, COM chủ yếu hỗ trợ việc sử dụng lại các thành phần cục bộ và không tối ưu cho các thành phần từ xa Để khắc phục điều này, Microsoft đã phát triển DCOM, kết hợp COM với giao thức mạng, cho phép chạy các đối tượng COM trên máy tính từ xa.
DCOM, giao thức độc quyền của Microsoft, mở rộng COM để hoạt động trong môi trường phân tán, cung cấp tính năng độ tin cậy, an ninh và hiệu quả giao tiếp giữa các đối tượng COM trên các quy trình và máy khác nhau Được phát triển trước khi Internet bùng nổ, DCOM không được thiết kế cho môi trường Internet.
.NET Remoting là một kỹ thuật được giới thiệu từ NET framework 1.1, cho phép truy xuất đối tượng giữa các Application Domain khác nhau Cùng với Webservice, NET Remoting là giải pháp lý tưởng cho xử lý tính toán từ xa Kỹ thuật này cho phép gọi một chương trình hoặc dịch vụ trên máy tính khác để thực hiện các tác vụ và trả về kết quả tính toán.
DCOM dựa trên một tập giao thức không được tất cả các đối tượng hỗ trợ, gây khó khăn cho việc chạy trên các nền tảng khác nhau Hơn nữa, DCOM sử dụng nhiều cổng mà thường bị chặn bởi tường lửa, khiến việc mở các cổng này trở thành một phiền phức, dù không quá khó khăn.
.NET Remoting khắc phục những hạn chế của DCOM bằng cách hỗ trợ nhiều giao thức khác nhau Giống như NET Remoting, Web Services cũng cho phép xử lý từ xa, và có thể biến NET Remoting thành Web Services khi được host trong IIS Web Services cho phép các ứng dụng giao tiếp mà không phụ thuộc vào nền tảng hay ngôn ngữ lập trình, nhưng không lưu lại trạng thái của các lần gọi trước (stateless) và không nhận biết phía Client thực hiện request Giao tiếp giữa Client và Services chỉ diễn ra qua các thông điệp SOAP Dưới đây là những điểm khác biệt chính giữa NET Remoting và Web Services, là yếu tố quan trọng trong việc lựa chọn công nghệ phù hợp.
Web Services chỉ có thể được truy xuất qua HTTP còn NET Remoting có thể được dùng trên nhiều giao thức khác nhau như TCP, HTTP
Web Services operate in a stateless environment, meaning that each request from the client generates a new object on the server to handle that specific request.
.NET Remoting lại hỗ trợ nhiều lựa chọn và có thể thực hiện nhiều request từ một Client, đồng thời có hỗ trợ callbacks
Dịch vụ web chuyển đổi các đối tượng thành XML trong tin nhắn SOAP, cho phép truyền tải thông tin của bất kỳ thành phần nào có khả năng chuyển đổi sang XML Trong khi đó, NET Remoting có thể truyền thông tin tùy thuộc vào giao thức và định dạng tin nhắn Đặc biệt, NET Remoting hỗ trợ việc truyền đối tượng dưới cả hai dạng tham chiếu (reference) và tham trị (value).
Web services có khả năng hoạt động trên nhiều môi trường khác nhau, trong khi NET Remoting yêu cầu ứng dụng phía Client phải là NET Application .NET Remoting cho phép tính toán phân tán dễ dàng nhờ vào mô hình lập trình đơn giản và mở rộng, mà không làm giảm tính linh hoạt và khả năng mở rộng Nó đi kèm với các thành phần mặc định như kênh và giao thức, nhưng tất cả đều có thể được thay thế bằng các tùy chọn tốt hơn mà không cần viết nhiều mã.
Mặc dù NET Remoting cung cấp hiệu năng tốt nhất và linh hoạt, nó cũng bị một số nhược điểm như:
Hoạt động tốt nhất trong mạng nội bộ, nơi có toàn quyền kiểm soát việc triển khai, phiên bản, và thử nghiệm
Thực tế, NET Remoting sở hữu độc quyền NET và các ứng dụng liền mạch để trao đổi dữ liệu giữa hai ứng dụng NET
Đòi hỏi phải có một bước nhảy vọt lớn giữa các chương trình ở mức cao và cơ sở hạ tầng
Bị các vấn đề về chia tải bởi vì nó không phải đủ thông minh để phân chia công việc giữa các máy tính khác nhau
Công nghệ phân tán hiện tại gặp hạn chế trong khả năng tương tác giữa các nền tảng, đặc biệt khi triển khai ứng dụng COM qua tường lửa hoặc router thông minh Nhiều công nghệ phân tán không được thiết kế để xử lý các bức tường lửa và router này Tuy nhiên, web services đã giải quyết vấn đề này bằng cách sử dụng các tiêu chuẩn mở và giao thức phổ biến.
Web services không chỉ đơn thuần là một phương thức để phát triển ứng dụng phân tán, mà còn khác biệt với các công nghệ phân tán khác nhờ vào việc sử dụng các giao thức tiêu chuẩn như SOAP, HTTP và XML Những tiêu chuẩn mở này được công nhận rộng rãi và được chấp nhận trong toàn ngành công nghiệp, giúp đảm bảo tính tương tác và khả năng gọi dễ dàng từ các nền tảng khác nhau.
Windows Người ta thường nhầm lẫn giữa Web servies và NET Remoting Nhưng các Web services có một mô hình lập trình đơn giản hơn NET Remoting
Webservices sử dụng XML để truyền tải dữ liệu, trong khi NET Remoting dựa trên CLR Mặc dù có thể sử dụng NET Remoting để phát triển dịch vụ web, nhưng WSDL do NET Remoting tạo ra không phổ biến và có thể không được một số Client chấp nhận NET Remoting phù hợp để xây dựng các thành phần cho ứng dụng chạy trong môi trường NET, trong khi Webservices cung cấp các thành phần có thể truy cập từ bất kỳ ứng dụng nào kết nối qua Internet.
Microsoft Message Queuing (MSMQ) là một công nghệ tin nhắn không đồng bộ, cho phép các ứng dụng gửi tin nhắn mà không cần phải biết kết quả ngay lập tức MSMQ hỗ trợ giao tiếp giữa các máy từ xa, bao gồm cả qua internet, giúp tăng cường khả năng tương tác giữa các ứng dụng.
2.3 Đặc trƣng, tính chất của WCF
WCF không chỉ là một phương pháp tạo ra giải pháp phân tán, mà còn mang lại nhiều lợi ích vượt trội so với các công nghệ trước đây Công nghệ này được Microsoft giới thiệu tại hội nghị phát triển năm 2003 ở Los Angeles, California, cùng với sự phát hành của NET WCF tập trung vào ba thiết kế chính trong các mục tiêu của nó.
Thống nhất các công nghệ hiện tại
Khả năng cộng tác trên nền tảng
Dịch vụ định hướng phát triển
Thống nhất của các công nghệ hiện tại
Thế giới hiện nay có nhiều công nghệ phân tán đa dạng, mỗi công nghệ mang một khái niệm, nhiệm vụ và vai trò riêng Những công nghệ này dựa trên các mô hình lập trình khác nhau, điều này ảnh hưởng đến các nhà phát triển, buộc họ phải liên tục cập nhật và học hỏi các API mới khi xây dựng các thành phần phân tán.
Từ những năm 1990, các tranh luận về công nghệ phân tán đã dẫn đến việc tìm kiếm các công nghệ tối ưu cho phát triển ứng dụng phân tán bền vững Một câu hỏi thú vị đặt ra là tại sao không thể có một công nghệ duy nhất phù hợp cho mọi tình huống.
Ưu, nhược điểm
WCF tương thích dễ dàng với các dịch vụ khác thông qua Net Remoting, đồng thời cung cấp độ tin cậy và bảo mật vượt trội so với các dịch vụ web ASMX Một ưu điểm nổi bật của WCF là không cần phải thay đổi nhiều trong mã lệnh để áp dụng các mô hình bảo mật và thay đổi ràng buộc; tất cả các thay đổi có thể thực hiện chỉ trong file cấu hình.
Kiến trúc mô hình WCF
Kiến trúc WCF được chia thành 4 tầng, với tầng ứng dụng ở vị trí cao nhất, nơi giao tiếp với người dùng và độc lập với nền tảng cũng như ngôn ngữ lập trình Các ứng dụng trong kiến trúc này trao đổi thông tin thông qua hợp đồng, bao gồm các giao dịch cơ bản như hợp đồng dịch vụ, hợp đồng dữ liệu và tin nhắn Mô hình kiến trúc WCF có thể được minh họa qua hình ảnh tương ứng.
Hợp đồng trong hệ thống tin nhắn xác định các khía cạnh quan trọng, bao gồm Data contract mô tả thông số dữ liệu cho tất cả tin nhắn dịch vụ, được định nghĩa bằng lược đồ XML Message contract xác định các bộ phận cụ thể của thông báo qua giao thức SOAP, giúp kiểm soát chi tiết hơn khi tương tác yêu cầu độ chính xác cao Cuối cùng, Service contract xác định chữ ký phương pháp thực tế của dịch vụ, được cung cấp dưới dạng giao diện trong các ngôn ngữ lập trình hỗ trợ.
Proxy và binding xác định các điều kiện cần thiết cho việc giao tiếp với dịch vụ, bao gồm việc chỉ định phương thức vận chuyển như HTTP hoặc TCP và mã hóa Chính sách này cũng nêu rõ các yêu cầu về an ninh và các điều kiện khác cần được đáp ứng để đảm bảo giao tiếp an toàn với dịch vụ.
Trong quá trình hoạt động của dịch vụ, có nhiều hành vi quan trọng cần được chú ý Hành vi Throttling điều chỉnh số lượng tin nhắn được xử lý và có thể thay đổi tùy theo nhu cầu phát triển dịch vụ Hành vi Error kiểm soát thông tin được truyền đạt đến khách hàng khi có lỗi xảy ra Hành vi Metadata xác định cách thức tương tác của siêu dữ liệu với thế giới bên ngoài Hành vi Install xác định số lượng trường hợp dịch vụ có thể chạy đồng thời Hành vi Transaction cho phép hệ thống phục hồi hoạt động giao dịch khi gặp thất bại Cuối cùng, Hành vi Message liên quan đến cách thức xử lý thông điệp bởi cơ sở hạ tầng WCF.
Hình 6: Các thành phần tham gia gửi và nhận tin
Lớp tin nhắn bao gồm các kênh, là những thành phần xử lý tin nhắn theo cách nhất định Các kênh hoạt động dựa trên tin nhắn và tiêu đề tin, khác với lớp Services Runtime, chủ yếu tập trung vào việc xử lý nội dung thông báo Có hai loại kênh chính: kênh vận tải và kênh giao thức.
Kênh vận tải có khả năng đọc và viết tin nhắn từ mạng hoặc các điểm liên lạc khác Một số phương tiện giao thông sử dụng mã hóa để chuyển đổi tin nhắn thành Infosets XML, giúp đại diện cho dòng byte trong các hệ thống mạng như HTTP, TCP, và MSMQ Việc mã hóa nhị phân XML và tối ưu hóa là cần thiết để cải thiện hiệu suất Kênh giao thức đảm nhận việc xử lý tin nhắn thông qua việc thêm các tiêu đề bổ sung vào nội dung tin nhắn.
Hình 7: Service Layer và Messaging Layer
Một dịch vụ có thể được xem như một chương trình, và giống như các chương trình khác, dịch vụ cần phải được thực thi Khái niệm này thường được gọi là dịch vụ tự lưu trữ trên máy chủ.
Dịch vụ có thể được lưu trữ và vận hành trong môi trường thực thi do đại lý bên ngoài quản lý, như IIS hoặc Windows Active Services (WAS) WAS cho phép tự động kích hoạt các ứng dụng WCF khi triển khai trên máy tính sử dụng WAS Ngoài ra, dịch vụ cũng có thể hoạt động độc lập dưới dạng file exe hoặc được khởi động tự động như một dịch vụ Windows.
WCF tương tự như mô hình hệ thống mở OSI, trong đó Services Model Layer là tầng chính trong lập trình Tầng này ảnh hưởng đến Messager Layer bên dưới, nơi quản lý giao thông tin nhắn thực tế Lớp tin nhắn thực hiện chức năng vận chuyển, bao gồm các kênh, giao thức và mã hóa Services Model Layer chứa các hành vi, hợp đồng và chính sách, trong đó hành vi là yếu tố quan trọng nhất, trong khi các kênh ở lớp tin nhắn đóng vai trò trung tâm.
Address
The URL serves as the hosting location for the WCF service, which clients use to connect to the service The general format of the URL is: [protocol]://[machine][:port], for example, http://localhost:8090/MyService/SimpleCalculator.svc.
Có 2 loại địa chỉ: địa chỉ cơ sở và địa chỉ mex Một endpoint trao đổi siêu dữ liệu và xuất bản các siêu dữ liệu này cho dịch vụ Các siêu dữ liệu dịch vụ được tiêu thụ bởi khách hàng để tạo ra một proxy và sau đó gọi service Endpoint hỗ trợ một tiêu chuẩn để trao đổi các siêu dữ liệu, WCF cung cấp thực hiện dưới hình thức của ImetadataExchange[4,10,12,15].
Binding
Binding là các mô tả giúp Client giao tiếp với dịch vụ, với nhiều giao thức tích hợp sẵn trong WCF Binding có một số đặc điểm quan trọng.
Vận chuyển-Transport( Định nghĩa một số giao thức cơ sở để sử dụng như HTTP, Named Pipes, TCP, and MSMQ…
Encoding involves three built-in types: Text, Binary, and Message Transmission Optimization Mechanism (MTOM) MTOM is a messaging format designed for large payloads exceeding 64kb.
Phù hợp giao tiếp với ASP.NET Web services (ASMX)- dựa trên dịch vụ cơ bản với WS-Basic Profile conformant Web services
Sử dụng HTTP trong vận chuyển và text/xml như là kiểu mã hóa tin nhắn mặc định
Mặc định không bảo mật
Không hỗ trợ các giao thức WS-* như WS- Addressing, WS-Security, WS- ReliableMessaging
Tính tương thích tương đối yếu
Định nghĩa tính bảo mật, tin cậy, tương thích cho các dịch vụ không song công
Cung cấp nhiều tính năng hơn về sự tương thích
Hỗ trợ WS-* và phiên phân tán với tính bảo mật và tin cậy bằng cách sử dụng SOAP
Sử dụng HTTP và HTTPS để giao tiếp
Tính tin cậy theo phiên là mặc định
Giống như WSHttpBinding, WSDualHttpBinding hỗ trợ giao tiếp song công, cho phép dịch vụ và Client trao đổi tin nhắn lẫn nhau Với WSDualHttpBinding, bảo mật phiên được hỗ trợ mặc định và giao tiếp diễn ra qua SOAP.
Binding này cung cấp tính năng bảo mật liên kết và khả năng chia sẻ thông tin giữa nhiều doanh nghiệp hoặc miền, đảm bảo tính xác thực và ủy quyền Ngoài ra, nó cũng hỗ trợ giao thức WS-Federation.
This binding offers security and reliability within the NET environment By default, it establishes a communication stack that utilizes the WS-ReliableMessaging protocol for reliability, TCP for message delivery, and Windows security for message protection and runtime authentication.
Sử dụng TCP hỗ trợ tính bảo mật, phiên, tính tin cậy
This binding offers a secure and reliable environment by utilizing the NamedPipe protocol It supports SOAP security, transactions, and reliability By default, it creates a communication stack with WS-ReliableMessaging, ensuring reliability, transactional integrity, and secure transport.
Binding này cung cấp tính bảo mật, tin cậy
Hàng đợi được cung cấp bởi MSMQ vận chuyển
Cung cấp bảo mật trong mô hình ngang hàng và ứng dụng mạng
Sử dụng giao thức TCP
Hỗ trợ SOAP, tính tin cậy, bảo mật
Binding mô tả cách thức giao tiếp giữa Client và dịch vụ trong WCF Có nhiều giao thức khác nhau có sẵn để Client tương tác với dịch vụ, và các loại giao thức này có thể được lựa chọn dựa trên yêu cầu cụ thể của ứng dụng.
WCF có khả năng phục vụ nhiều loại khách hàng khác nhau, ví dụ như một khách hàng truy cập dịch vụ SOAP qua HTTP và một khách hàng khác sử dụng giao thức TCP để truy cập dịch vụ nhị phân Điều này dễ dàng thực hiện trong WCF chỉ bằng cách thêm một endpoint vào file cấu hình, điều mà khó khăn trong Web Service Hành vi của endpoint sẽ ảnh hưởng đến tất cả các endpoint, trong khi hành vi dịch vụ chỉ tác động đến các khía cạnh liên quan đến dịch vụ Hành vi ảnh hưởng đến thuộc tính của endpoint chỉ liên quan đến endpoint, và hành vi cấp thao tác (operation) chỉ ảnh hưởng đến các hoạt động cụ thể.
Contract
Giao diện của các endpoint là tập hợp các thao tác xác định khả năng giao tiếp với thế giới bên ngoài Tên của giao diện thường được ghi trong hợp đồng để ứng dụng Client có thể nhận biết Mỗi thao tác này hoạt động như một mô hình trao đổi đơn giản, có thể là một chiều, song công hoặc theo cơ chế request/response.
Trong WCF, tất cả dịch vụ được định nghĩa qua các hợp đồng, đóng vai trò là nền tảng trung lập và mô tả các tiêu chuẩn về chức năng của dịch vụ Có bốn loại hợp đồng chính trong WCF.
2.8.1 Các loại hợp đồng Hợp đồng dịch vụ (Service Contract)
Hợp đồng dịch vụ mô tả các hoạt động mà dịch vụ có thể cung cấp, chẳng hạn như cung cấp thông tin về nhiệt độ của thành phố, được gọi là dịch vụ hợp đồng Dịch vụ này được xây dựng dựa trên các thuộc tính Service và Operation Contract.
Hợp đồng Dữ liệu (Data Contract)
Hợp đồng dữ liệu giúp Client nhận diện và thực thi các kiểu dữ liệu khác nhau, bao gồm các loại cơ bản như integer và string được xác định trong lược đồ XML Ngoài ra, còn có các kiểu dữ liệu do người dùng định nghĩa như class và tập hợp Sử dụng DataContract, Client có thể nhận thức rõ ràng về các kiểu dữ liệu này.
Hợp đồng tin nhắn( Message Contract)
Bản tin SOAP mặc định do WCF cung cấp hỗ trợ giao tiếp giữa khách hàng và dịch vụ, tuy nhiên, chúng ta cũng có khả năng tạo ra các thông điệp tùy chỉnh Việc này có thể thực hiện thông qua thuộc tính Message Contract.
Hợp đồng Lỗi( Fault Contract)
Khi sử dụng dịch vụ, việc gặp lỗi là điều bình thường Để tìm hiểu chi tiết về lỗi gặp phải, chúng ta có thể sử dụng Fail Contract[4,8,15].
2.8.2 Các hình thức giao tiếp giữa Client và Service
Trong lập trình hướng đối tượng, lớp và component là cách duy nhất để Client gọi một phương thức tới dịch vụ Client sẽ thực hiện cuộc gọi, tạm dừng quá trình cho đến khi xử lý xong, và sau đó trả lại kết quả.
WCF hỗ trợ mô hình truyền thống Request-Replay, One-Way call (gọi và không trả lại), callback (dịch vụ gọi tới Client)
Hình 9: Các hình thức giao tiếp giữa Client và Service [15]
Mặc định, tất cả các dịch vụ WCF hoạt động theo chế độ yêu cầu/phản hồi, nghĩa là khi Client gửi yêu cầu đến WCF Service, Client sẽ chờ nhận kết quả từ Service (có thời gian chờ receiveTimeout) Nếu Service không trả kết quả trong thời gian quy định, Client sẽ gặp phải TimeOutException.
Ngoài NetPeerTcpBinding, NetMsmqBinding và tất cả các binding khác đều hỗ trợ request-reply
Hình 10: Hình thức giao tiếp Request-Replý [15]
Trong chế độ One-Way, Client gửi yêu cầu đến Server mà không cần quan tâm đến kết quả thành công hay thất bại Server không trả lại phản hồi, tạo thành giao dịch một chiều Client chỉ chờ một khoảng thời gian cho đến khi gửi yêu cầu, và các lỗi ngoại lệ sẽ không được chuyển đến Server.
Khách hàng có thể tiếp tục thực hiện các tác vụ sau khi gửi yêu cầu một chiều tới máy chủ mà không cần phải chờ đợi máy chủ hoàn thành Đôi khi, các yêu cầu một chiều có thể không được gửi đi cùng lúc và sẽ được đưa vào hàng đợi Nếu số lượng tin nhắn trong hàng đợi vượt quá khả năng xử lý, hệ thống sẽ chặn tất cả, bao gồm cả các yêu cầu một chiều Tuy nhiên, khi có yêu cầu từ máy khách, hệ thống sẽ mở khóa và cho phép khách hàng tiếp tục thực hiện, trong khi máy chủ xử lý các thao tác tiếp theo.
Hình 11: Hình thức giao tiếp One- way [15]
Liên lạc One-way có thể được khởi tạo bằng cách thiết lập thuộc tính IsOneWay = true trong thuộc tính Operation contract
[OperationContract(IsOneWay=true)] void MyMethod(EmployeeDetails emp);
Chúng ta hãy theo dõi ví dụ sau, điều gi đang xảy ra khi sử dụng giao tiếp one- way với Sessionful service?
[ServiceContract(SessionMode = SessionMode.Required)] interface IMyContract {
[OperationContract(IsOneWay = true)] void MyMethod();
When a client makes a one-way call using MyMethod() and the proxy is closed, the client will be locked until the operation is completed The one-way service is applicable to both per-call and singleton service types.
Khi sử dụng dịch vụ One-way trong dịch vụ Sessionful, thao tác cuối cùng sẽ kết thúc phiên làm việc Do đó, hoạt động này không nên trả về bất kỳ giá trị nào.
[ServiceContract(SessionMode = SessionMode.Required)] interface IMyContract {
[OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = true)] string CloseSessionService(int id);
One-Way Operations và ngoại lệ
Khi sử dụng BasicHttpBinding hoặc WSHttpBinding mà không có session vận chuyển, bất kỳ ngoại lệ nào phát sinh từ service sẽ không ảnh hưởng đến Client Client có thể thực hiện nhiều lời gọi tới service thông qua cùng một proxy.
[OperationContract(IsOneWay = true)] void MethodWithError( );
} MyContractClient proxy = new MyContractClient( ); proxy.MethodWithError( ); proxy.MethodWithoutError( ); proxy.Close( );
In the event of using a transport session, any errors occurring from the service will also impact the Client Channel Consequently, the Client will be unable to make a new call using the same proxy instance.
MyContractClient proxy = new MyContractClient( ); proxy.MethodWithError( ); proxy.MethodWithoutError( ); proxy.Close( );
Trong môi trường WCF, mọi Client thường gọi đến service để thực hiện các thao tác hoặc lấy dữ liệu Tuy nhiên, WCF còn cho phép service có khả năng gọi đến Client, tạo ra một mối quan hệ linh hoạt hơn giữa hai bên Nhờ đó, service có thể hoạt động như một Client, trong khi Client lại có thể đóng vai trò như một service.
Hành xử( Behavior)
Hành xử dịch vụ ( Service Behivior)
Hành xử dịch vụ là yếu tố quan trọng trong việc thực hiện các giải pháp tầng dịch vụ Các thuộc tính ServiceBehavior chỉ có hiệu lực ở cấp độ class, trong khi các thuộc tính ServiceContract được áp dụng cho giao diện của cả hai hợp đồng và các cấp class.
Một số thuộc tính như:
Currency: Kiểm soát hành xử xử lí một đối tượng và hỗ trợ cuộc gọi Chỉ có hiệu lực nếu thuộc tính Instancing không phải là PerCall
Instancing là quá trình kiểm soát và điều khiển vòng đời của đối tượng trong lập trình Mặc định, kiểu instancing được thiết lập là PerCall, nghĩa là một đối tượng mới sẽ được tạo ra cho mỗi cuộc gọi phương thức Tuy nhiên, trong các dịch vụ định hướng session, việc sử dụng PerSession hoặc Shareable có thể mang lại hiệu suất tốt hơn, mặc dù điều này có thể dẫn đến chi phí quản lý đồng thời cao hơn.
Throttling là phương pháp quản lý thông qua cấu hình, cho phép thực hiện nhiều cuộc gọi đồng thời nhưng hạn chế số lượng cuộc gọi, kết nối, tổng số trường hợp và thời gian chờ.
Transaction: Kiểm soát các khía cạnh giao dịch
Session: Cung cấp việc tắt hoặc ghi đè lên session
Hành xử hợp đồng ( Contract Behivior)
Implementing the System.ServiceModel.Description.IContractBehavior interface allows for customizable behaviors during runtime, specifically related to DispatchRuntime and ClientRuntime These behaviors can be incorporated into properties within the code For example, you can add a custom contract behavior by iterating through the service endpoints, as shown in the following code snippet: foreach (ServiceEndpoint se in host.Description.Endpoints) { se.Contract.Behaviors.Add(new CustomBehavior); }.
Hành xử thao tác ( Operation Behivior)
Implementing the System.ServiceModel.Description.IOperationBehavior interface allows for customization of execution by modifying the Operation or ClientOperation objects This behavior can be enhanced through the addition of properties or programmatic adjustments To iterate through the service endpoints, one can utilize a foreach loop on the host's description of endpoints.
{ foreach (OperationDescription od in se.Contract.Operations)
{ od.Behaviors.Add(new CustomBehavior);
Hành xử điểm cuối( EndpointBehavior)
Implementing the System.ServiceModel.Description.IEndpointBehavior interface allows for customizable behavior based on the EndpointDispatcher object This behavior can be added either through configuration or programmatically For each ServiceEndpoint in the host's description, new behaviors can be appended to enhance functionality.
Chanel Stack
Trong WCF, tất cả giao tiếp chi tiết được quản lý bởi kênh, một thành phần quan trọng trong quá trình xử lý tin nhắn Kênh này bắt đầu bằng một kênh vận chuyển, thực hiện thông qua các giao thức vận chuyển để gửi tin nhắn Kênh vận chuyển sử dụng bộ mã hóa tin nhắn để chuyển đổi các byte đến thành các đối tượng hợp lý và tiếp tục xử lý.
Tin nhắn trong kênh giao thức sẽ được xử lý qua từng lớp của Chanel stack cho đến khi nó đạt đến đỉnh và WCF nhận tín hiệu để thực hiện dịch vụ Trong quá trình này, tin nhắn có thể bị biến đổi đáng kể Việc phát triển và làm việc trực tiếp với kiến trúc của Chanel stack khá phức tạp, do đó WCF cung cấp một giải pháp đơn giản hơn thông qua việc sử dụng điểm cuối.
WCF endpoint giao tiếp với thế giới thông qua một stack giao tiếp gọi là Channel stack, nơi các tin nhắn truyền thông được lưu thông qua ngăn xếp Các kênh phía dưới, được gọi là kênh giao thông, có nhiệm vụ gửi và nhận tin nhắn từ các bên khác Trên các kênh vận chuyển, có nhiều kênh giao thức cung cấp chức năng giao tiếp, đảm bảo tính đáng tin cậy bằng cách thêm tiêu đề, mã hóa nội dung và xác nhận giấy biên nhận.
Channel stacks sử dụng Factory Pattern để tạo ra một Channel Stack Khi gửi tin nhắn, một hành vi được áp dụng để xây dựng Channel Factory, từ đó tạo ra Channel Stack và trả về con trỏ tham chiếu đến đỉnh Channel trên Stack Ứng dụng có thể sử dụng cấu trúc này để gửi và nhận tin nhắn một cách hiệu quả.
Xây dựng một Channel Factory
Gửi một Request và đọc phản hồi
Đóng tất cả các kênh Ở phía nhận, một binding sẽ được sử dụng để xây dựn một giao diện
IChannelListener listens for incoming messages and facilitates their delivery to applications by creating Channel Factories and referencing the heads of channels Applications then utilize these channels to receive incoming mail.
Xây dựng một Channel Listener
Đọc các yêu cầu đến và gửi phản hồi
Đóng tất cả các Channel Objects.
Chanel
Chanel là một kênh quản lý tin nhắn giữa ứng dụng WCF, xác định hình thức vận chuyển và giao thức Từ Chanel, các ChanelStack được tạo ra, cho phép gửi và nhận tin nhắn tùy thuộc vào cấu hình Binding Có hai loại kênh: kênh vận chuyển và kênh giao thức Kênh vận chuyển thường nằm ở dưới cùng của Chanel Stack, sử dụng giao thức vận chuyển, trong khi kênh giao thức nằm ở trên cùng, hỗ trợ các tính năng như bảo mật, phiên làm việc và độ tin cậy của tin nhắn.
During communication, both the Client and Services create corresponding Channel Stacks using Bindings Bindings consist of a collection of Binding elements, with each Binding element generating a Channel within the Channel Stack.
Luồng tin nhắn từ ứng dụng Client được truyền qua Client Channel Stack đến Server Channel Stack, và sau đó được điều phối để đến ứng dụng phía Server.
Trên đỉnh của Chanel Stack, protocol Channel tương tác với tin nhắn và cung cấp các tính năng như bảo mật, phiên, tin cậy và lưu vết Transport Channel đại diện cho khả năng gửi và nhận byte qua các giao thức vận chuyển như TCP hay HTTP, có thể kèm theo mã hóa tin nhắn Channel có thể tích hợp ít nhất một chức năng vận chuyển và mã hóa.
Chanel Listener là lớp cơ bản trong WCF phía dịch vụ, có nhiệm vụ theo dõi tin nhắn đến từ chanel stack và chuyển tiếp đến ứng dụng Nó nhận tin nhắn từ transport Channel hoặc Channel ở phía dưới Hầu hết các lập trình viên tương tác trực tiếp với Chanel Listener thông qua class service host.
Channel Factory tạo ra kênh để gửi tin nhắn và giữ quyền sở hữu các kênh mà nó tạo ra Hầu hết các nhà phát triển không trực tiếp sử dụng Channel Factory Hiểu rõ về Channel Factory là rất quan trọng vì chúng là nền tảng cho phía Client trong việc truyền tin trong WCF.
Một điểm khác biệt quan trọng giữa Channel Listener và Channel Factory là Channel Factory có trách nhiệm đóng cửa tất cả các kênh liên quan, trong khi Channel Listener không có nhiệm vụ này Sự khác biệt này cho phép Channel Listener hoạt động độc lập và có thể được tắt mà không ảnh hưởng đến các kênh khác.
Chanel Factory và Chanel Listener là hai thành phần quan trọng trong việc gửi và nhận tin nhắn, chịu trách nhiệm tạo ra các ngăn xếp kênh và cung cấp Chanel Stack cho các ứng dụng Mỗi dịch vụ WCF bao gồm ba thành phần chính: một service class được triển khai bằng C#, VB hoặc ngôn ngữ khác trên CLR, một host process để lưu trữ dịch vụ, và một hoặc nhiều thiết bị endpoint cho phép khách hàng truy cập dịch vụ Tất cả thông tin liên lạc với dịch vụ WCF diễn ra thông qua các endpoint này.
Để triển khai dịch vụ, cần thực hiện các bước bao gồm định nghĩa hợp đồng, thực thi hợp đồng, xác định Endpoint, host và chạy dịch vụ Đối với phía trình khách, quy trình bắt đầu bằng việc tạo Proxy từ siêu dữ liệu, tiếp theo là thực hiện chạy dịch vụ.
Điều phối ( Dispatcher)
Dispatcher là tập hợp các kiểu trong class ServiceModel tại ứng dụng nhận
Dispathcher thuộc namespace System.ServiceModel.Dispatcher Các nhiệm vụ được thực hiện bởi các ChannelDispatcher và các loại tham chiếu bởi
Tạo ra một kênh nghe từ ràng buộc
Quản lý kênh nhận được từ người nghe
Quản lý các vòng lặp nghe
Quản lý thời gian tồn tại của người nghe kênh và các ngăn xếp kênh kết quả
Hạn chế tốc độ mà tại đó các tin nhắn nhận được từ ngăn xếp kênh (cũng được gọi là throttling)
Quản lý việc tạo, vòng đời, và số lượng của các đối tượng dịch vụ
Định tuyến nhận tin nhắn cho các đối tượng dịch vụ
Deserializing đối tượng có ý nghĩa từ tin nhắn nhận được
Sử dụng các đối tượng deserialized để gọi một phương thức trên một đối tượng dịch vụ
Instance Management
Routing tin nhắn trả lời để ngăn xếp kênh thích hợp và gửi trở lại cho người gửi thông qua đó ngăn xếp kênh
Xử lý sai sót trong những nhiệm vụ trước
Quản lý thực hiện hành vi mặc định và tùy chỉnh trong các nhiệm vụ trước
2.13 Quản lý đối tƣợng-Instance Management
Quản lý đối tượng trong WCF liên quan đến việc xử lý yêu cầu từ khách hàng và bao gồm các kỹ thuật giúp Client kết nối với dịch vụ Việc này rất cần thiết vì các ứng dụng có nhu cầu khác nhau về khả năng mở rộng, hiệu suất, độ bền, giao dịch và gọi hàng đợi Trong WCF, thường có ba mô hình đối tượng chính được sử dụng.
When the WCF service is configured in Per-Call mode, a new Service Instance is created for each client request This Service Instance is disposed of after the results are returned to the client.
Mô hình sau đây đại diện cho tiến trình xử lý yêu cầu từ Client khi thiết lập chế độ Per-Call
Hình 17: Tiến trình Per call [15]
Tất cả yêu cầu dịch vụ đều trả về '1' do chúng ta đã cấu hình chế độ Instance là Per-Call, dẫn đến việc mỗi yêu cầu sẽ tạo ra một service instance mới và thiết lập giá trị biến tĩnh cho từng yêu cầu.
Khi cấu hình dịch vụ WCF ở chế độ Per-Session Instance, các phiên làm việc giữa Client và Service sẽ được lưu trữ Mỗi khi Client tạo một Proxy mới cho dịch vụ cụ thể, một trường hợp dịch vụ riêng biệt sẽ được cấp phát cho khách hàng, hoàn toàn độc lập với các trường hợp khác Mô hình này minh họa quy trình yêu cầu từ Client tới Service trong chế độ Per-Session.
When a WCF service is configured in Singleton Instance mode, all clients connect independently to the same single instance of the service object This Singleton instance is created when the service is hosted and is disposed of when the host is shut down The following diagram illustrates the request handling process for clients using Singleton Instance mode.
Hosting dịch vụ
Có bốn phương pháp khác nhau để lưu trữ các dịch vụ WCF, vì các dịch vụ này không thể hoạt động độc lập mà cần được lưu trữ trong các tiến trình của Windows Một tiến trình hosting đơn lẻ có khả năng lưu trữ nhiều máy chủ, và các dịch vụ tương tự có thể được tổ chức trong nhiều tiến trình hosting khác nhau.
Có nhiều hosting và giao thức hỗ trợ WCF Microsoft giới thiệu khái niệm WCF để phát triển các ứng dụng phân tán dễ dàng hơn[3]
Môi trường Hỗ trợ giao thức
Windows console and form application HTTP, net.tcp, net.pipe, net.msmq Windows service application HTTP, net.tcp, net.pipe, net.msmq
Web Server IIS6 http, wshttp
Web Server IIS7 - Windows Process Activation Service (WAS)
HTTP, net.tcp, net.pipe, net.msmq
Tóm tắt các loại hosting và các tính năng hỗ trợ
Tính năng Self-Hosting IIS Hosting WAS Hosting
App Domain Yes Yes Yes
Configuration App.config Web.config Web.config
Idle-Time Management No Yes Yes
Health Monitoring No Yes Yes
Process Recycling No Yes Yes
Management Tools No Yes Yes
2.14.1 IIS 5/6 Hosting Ưu điểm chính của hosting service trong IIS là nó sẽ tự động xử lý host khi Client gọi tới lần đầu tiên Sử dụng các tính năng của IIS là xử lý quay vòng, tạo trạng thái nghỉ, bảo vệ màn hình, các hoạt động dựa trên tin nhắn, nhược điểm chính là chỉ hỗ trợ giao thức HTTP[3]
With web services, hosting is limited to IIS, whereas WCF allows users to host services in various applications, including console applications and Windows Forms.
Với Self host, lập trình viên có khả năng tạo và quản lý vòng đời của các bộ xử lý host Lưu ý rằng tiến trình Host cần phải được khởi động trước khi nhận yêu cầu từ Client.
The Windows Activation Service is an integrated system service found in Windows Vista and Windows Server 2008 It is built into IIS 7.0, which offers enhanced capabilities compared to IIS 6.0, as it supports HTTP, TCP, and Named Pipes, while IIS 6.0 only supports HTTP Additionally, it can be installed and configured separately.
Hosting WCF trong dịch vụ Activation mang lại nhiều lợi ích, bao gồm khả năng tái chế tài nguyên, cách ly, quản lý thời gian nhàn rỗi và cấu hình hệ thống tổng thể Dịch vụ WAS có thể được thiết lập thông qua các bước cụ thể.
Kích hoạt WCF với giao thức non-http
Kích hoạt các binding khác nhau để hosted dịch vụ
Nó tương tự như hosting service trong IIS mà không cần kích hoạt tin nhắn ưu điểm của cách hosting trong Windows service là:
Dịch vụ sẽ được hosted khi hệ thống được khởi động
Thời gian sống của tiến trình được điều khiển bởi Service Control Manager trong Windows Service
Tất cả các phiên bản của Windows đều hỗ trợ hosting WCF service[3].
Bảo mật trong WCF
Việc bảo mật trong WCF được xác định trong 4 tính năng quan trọng:
Bảo mật thông tin là yếu tố quan trọng, đảm bảo rằng chỉ những bên có thẩm quyền mới có thể truy cập vào thông điệp mật được truyền giữa bên gửi và bên nhận Để đạt được điều này, việc sử dụng các thuật toán mã hóa là cần thiết, giúp bảo vệ dữ liệu khỏi những truy cập trái phép.
Để đảm bảo tính toàn vẹn trong giao tiếp, bên nhận cần nhận được chính xác thông điệp từ bên gửi Để đạt được điều này, bên gửi phải sử dụng chữ ký điện tử (digital signature) cho các thông điệp được gửi đi.
Chứng thực (Authentication): tính năng này dùng để kiểm tra người gửi và người nhận là ai và họ có được biết bởi hệ thống hay không
Quyền hạn (Authorization) là yếu tố quan trọng để xác định xem người gửi hoặc người nhận có được phép thực hiện hành động mà họ yêu cầu từ ứng dụng hay không Việc xác minh quyền hạn giúp đảm bảo tính an toàn và bảo mật trong quá trình xử lý thông tin.
Bảo mật trong WCF được triển khai trên nhiều thành phần của kiến trúc WCF, với mục tiêu chính là đảm bảo tính toàn vẹn và bảo vệ thông tin trong quá trình truyền tải.
Integrity, confidentiality, authentication, authorization, and auditing are essential components for applications built on the WCF platform The architecture of WCF is divided into several key functions that support these security measures.
Transfer security is essential for ensuring message confidentiality, data integrity, and the authentication of communicating parties.
Quyền hạn (Authorization): chịu trách nhiệm cung cấp nền tảng cho việc đưa ra các quyết định về quyền hạn (authorization decisions)
Lưu vết (Auditing): chịu trách nhiệm cho việc ghi lại các sự kiện liên quan đến bảo mật để lưu vết
Việc mật truyền (Transfer security) có thể được thực hiện bằng cách sử dụng một trong các chế độ bảo mật (security mode) sau [4][18] :
Chế độ bảo mật vận chuyển (Transport Security Mode) cung cấp ba chức năng bảo mật quan trọng cho việc truyền thông điệp giữa Client và service Ưu điểm của chế độ này là tính phổ biến trên nhiều nền tảng và độ phức tạp toán học thấp Tuy nhiên, nhược điểm chính là chỉ đảm bảo an toàn cho dữ liệu từ điểm đến điểm (point to point).
Chế độ Bảo mật Thông điệp (Message Security Mode) cung cấp bảo mật ở cấp độ thông điệp SOAP, tức là bảo mật được áp dụng trực tiếp lên thông điệp SOAP ở cấp độ XML Ưu điểm của chế độ này là không phụ thuộc vào giao thức vận chuyển, dễ mở rộng và đảm bảo bảo mật đầu cuối Tuy nhiên, nhược điểm của nó là tốc độ chậm hơn so với chế độ Bảo mật Vận chuyển (Transport Security) do phải xử lý dữ liệu XML.
Transport with Message Credential Security Mode ensures secure transmission by implementing security measures at both the transport and message layers The transport layer offers communication confidentiality, data integrity, and service authentication, while the message layer focuses on client authentication.
Một số kịch bản bảo mật trong WCF như[4,18]:
Client Authentication với Transport–Level Security
Client Authentication với Message-Level Security
Message Security với Issued Tokens
Message Security với Mutual Certificates
Message Security với Windows Client không sử dụng Credential Negotiation
Message Security with a Windows Client
Message Security with a Certificate Client
Message Security with a User Name Client
Message Security with an Anonymous Client
Transport Security with Certificate Authentication
Transport Security with an Anonymous Client
Transport Security with Windows Authentication
Transport Security with Basic Authentication
Intranet Unsecured Client and Service
Internet Unsecured Client and Service
Chương trình ứng dụng
Khảo sát bài toán
Các công việc chính trong công ty:
Phòng hành chính, kế toán, nhân sự thực hiện các công việc liên quan đến nhân sự, kế toán, kế hoạch tài vụ…
Phòng kinh doanh chủ yếu ký kết hợp đồng và tìm kiếm khách hàng
Phòng biên tập đưa nội dung tin tức lên các website nội bộ của công ty
Phòng kỹ thuật được chia thành các nhóm khác nhau, phụ trách việc phát triển ứng dụng, thiết kế đồ họa
Nhân viên kinh doanh tìm kiếm khách hàng, cập nhật và chuyển hợp đồng cho bộ phận kế toán kiểm tra, duyệt hợp đồng
Nếu hợp đồng được phê duyệt, nó sẽ được chuyển cho các bộ phận thiết kế Trưởng nhóm thiết kế sẽ tiếp nhận và phân công nhiệm vụ thiết kế Sau khi hoàn tất thiết kế, công việc sẽ được chuyển giao cho bộ phận kỹ thuật.
Trưởng nhóm kỹ thuật sau khi tiếp nhận hợp đồng sẽ phân công công việc lập trình cho các cá nhân khác trong phòng ban
Sau khi hoàn tất lập trình và kiểm tra, bộ phận kỹ thuật sẽ bàn giao công việc cho bộ phận chăm sóc khách hàng cho đến khi hợp đồng được chấp thuận Trong quá trình này, nếu yêu cầu chưa đạt yêu cầu, các bộ phận có thể xảy ra tình huống hủy bỏ yêu cầu.
Các kiểu công việc và hợp đồng bao gồm:
Khi nhận được hợp đồng dịch vụ, quy trình thực hiện bao gồm các công việc liên quan đến hợp đồng Domain hosting, hợp đồng quảng cáo Google Adwords và hợp đồng Bizweb.
Công việc trực tiếp: Là các công việc được giao trực tiếp giữa các cá nhân
Công việc theo dự án: Phụ thuộc vào quản lý dự án phân công, tùy từng dự án cụ thể
Dưới đây là một số đặc tả quy trình làm việc trong công ty DKT:
Trước khi vào workflow: Nhân viên kinh doanh tiếp cận khách hàng, gửi tài liệu, site demo, lấy thông tin
Đến gặp khách hàng tìm hiểu nhu cầu
Gửi tài liệu hướng dẫn sử dụng
Điền các thông tin thu được vào phiếu yêu cầu của khách hàng
Thông nhất với khách hàng về giá cả
Hình 20: Quy trình dịch vụ Bizweb trong công ty DKT
Kinh doanh nhập thông tin khách hàng lên hệ thống, chọn loại hợp đồng tương ứng để triết ra hợp đồng tương ứng
Sau khi ký hợp đồng, Kinh doanh vào chọn loại hợp đồng, thông tin khách hàng đã lưu để tạo hợp đồng ban đầu (Bắt đầu bước 1)
Kinh doanh tạo hợp đồng mới trên hệ thống, với các thông tin (thông tin khách hàng, thông tin hợp đồng, file đính kèm…)
Hợp đồng vẫn đang ở trạng thái “Hợp đồng mới” thì Kinh doanh vẫn có thể chỉnh sửa, cập nhật thông tin, hay xóa hợp đồng được
Sau khi nhận được hợp đồng mới, kế toán sẽ kiểm tra và xác nhận nội dung hợp đồng trên màn hình Nếu phát hiện hợp đồng không hợp lệ, kế toán sẽ chọn "không xác nhận" và chuyển trạng thái hợp đồng sang "Chờ xác nhận".
Màn hình kinh doanh hiện đang hiển thị hợp đồng chưa được xác nhận Do đó, bộ phận kinh doanh cần thống nhất lại hợp đồng và cập nhật thông tin để kế toán có thể xác nhận lại.
Việc này chỉ dừng lại khi kế toán chấp nhận xác nhận cho hợp đồng
Hợp đồng chuyển trạng thái “Đang thiết kế” và chuyển sang trưởng nhóm thiết kế
Sau khi nhận Hợp đồng ở trạng thái “Đang thiết kế”, trưởng nhóm thiết kế sẽ xem xét các thông tin đính kèm, phân công công việc cho các nhân viên thiết kế và đặt ra hạn hoàn thành cho nhóm.
Trong quá trình thực hiện dự án, nếu khách hàng có yêu cầu đột xuất về thiết kế, trạng thái hợp đồng sẽ vẫn được duy trì là "Đang thiết kế" Tất cả các yêu cầu này sẽ được ghi lại một cách rõ ràng.
“comment” hoặc “tài liệu thêm” cho hợp đồng
Nếu hết thời gian mà thiết kế chưa hoàn thành thì vẫn chuyển trạng thái hợp đồng về “Chờ thiết kế”
Nhóm thiết kế đã hoàn thành công việc, tuy nhiên, bộ phận kinh doanh và chăm sóc khách hàng đã bổ sung thông tin về việc chưa đáp ứng đúng yêu cầu của khách hàng Do đó, hợp đồng sẽ được chuyển trạng thái sang "Chờ thiết kế".
Chỉ khi nhóm thiết kế, kinh doanh và chăm sóc khách hàng đạt được sự đồng thuận về việc hoàn thành bản thiết kế đúng yêu cầu, hợp đồng mới được chuyển sang trạng thái “đang triển khai” và hiển thị trên màn hình của trưởng nhóm triển khai.
Sau khi hợp đồng được xác nhận ở trạng thái “Đang triển khai”, trưởng nhóm sẽ xem xét các thông tin đính kèm và phân công nhiệm vụ cho các nhân viên trong nhóm Đồng thời, trưởng nhóm cũng sẽ đặt ra hạn hoàn thành cho toàn bộ quá trình triển khai.
Trong quá trình thực hiện dự án, nếu khách hàng có yêu cầu đột xuất về triển khai, trạng thái hợp đồng sẽ vẫn được giữ là “đang triển khai” Tất cả các yêu cầu này sẽ được ghi lại dưới dạng “comment” hoặc “tài liệu thêm” cho hợp đồng.
Nếu quá thời gian triển khai mà chưa hoàn thành, hợp đồng sẽ chuyển sang trạng thái “Chờ triển khai” Mục đích của việc này là để đánh giá mức độ hoàn thành của nhóm triển khai dựa trên thời gian chờ đợi.
Nhóm triển khai đã hoàn thành nhiệm vụ, tuy nhiên, bộ phận kinh doanh và chăm sóc khách hàng cần bổ sung thông tin về những công việc chưa đáp ứng yêu cầu của khách hàng Trong trường hợp này, hợp đồng sẽ được chuyển trạng thái về dạng “chờ triển khai”.
Chỉ khi nhóm triển khai, kinh doanh và chăm sóc khách hàng đồng thuận rằng bản thiết kế đã hoàn thành đúng yêu cầu, hợp đồng sẽ được chuyển sang trạng thái “Đang bàn giao” và gửi đến trưởng nhóm chăm sóc khách hàng.
Sau khi nhận hợp đồng "Đang bàn giao", trưởng nhóm chăm sóc khách hàng sẽ xem xét các thông tin đính kèm, phân công công việc cho nhân viên và đặt ra hạn hoàn thành cho nhóm.
Xây dựng chương trình
Áp dụng một số nội dung WCF trong dự án tại một số phần như:
Tổ chức dự án thành ứng dụng n-tiers
Xây dựng ứng dụng gadget dùng json-Ajax
Sử dụng IIS hosting để hosting dịch vụ
Khi làm việc với ứng dụng WCF, việc cấu hình là một thách thức lớn, vì nó yêu cầu thiết lập file config để dịch vụ và Client có thể giao tiếp hiệu quả Cấu hình này bao gồm địa chỉ, tên hợp đồng, các binding và behaviors, giúp đảm bảo sự kết nối giữa các thành phần.
Cấu hình dịch vụ WCF, phải được đặt trong khối Chủ yếu cấu hình phần services và phần behaviors
Tổ chức dự án thành ứng dụng n-tiers
Dự án có thể được tổ chức theo nhiều mô hình khác nhau, và trong bài viết này, tôi lựa chọn mô hình n-tiers Mô hình này mang lại sự rõ ràng, dễ cài đặt và phù hợp với môi trường ASP 2.0.
Tầng UI: là các ứng dụng phía trình khách, có thể là các website khai thác dịch vụ, chương trình winform…
Tầng WCF Services cho phép xuất bản các hàm chức năng dưới dạng dịch vụ, trong khi Tầng Business thực hiện các chức năng trung gian giữa tầng UI và DataAccess Cuối cùng, Tầng DataAccess đảm nhiệm việc thao tác trực tiếp với cơ sở dữ liệu.
Mối liên hệ giữa các tầng trong ứng dụng được mô tả theo sơ đồ sau:
Hình 23: Kiến trúc chương trình ứng dụng
Trước đây, việc trao đổi dữ liệu giữa trình khách và dịch vụ chủ yếu chỉ sử dụng các kiểu dữ liệu cơ bản như số nguyên, chuỗi, và giá trị logic Khi sử dụng kiểu dữ liệu đối tượng, việc này trở nên phức tạp hơn.
Dịch vụ cơ sở dữ liệu có thể gặp nhiều khó khăn trong quá trình cài đặt Với WCF, DataContract được tạo ra như những đối tượng thông tin, giúp việc trao đổi dữ liệu kiểu đối tượng giữa Client và dịch vụ trở nên thuận lợi hơn.
Việc tạo ra các đối tượng trong NET rất đơn giản; để tạo một datacontract, chỉ cần thêm thẻ trước mỗi lớp đối tượng cần xuất bản Đối với các thuộc tính cần xuất bản xuống Client, hãy thêm thẻ trước mỗi thuộc tính đó.
Tầng WCFServices: Tổ chức dự án tường minh bằng cách khai báo các giao diện và các class thực thi giao diện này tương ứng
Function DMS_Groups_GetById(ByVal Id As Integer) As _GroupInfo _
Function DMS_Groups_GetAll() As List(Of _GroupInfo) _
Function DMS_Groups_Insert(ByVal objInfo As _GroupInfo) As Integer _
Sub DMS_Groups_Delete(ByVal Id As Integer) _
Sub DMS_Groups_Update(ByVal objInfo As _GroupInfo)
_ Public Class _REQProjectInfo Private _ContractId As Integer Private _AppendixTech As String Private _AppendixCost As String Private _Plan As String
_ Public Property ContractId() As Integer Get
Set(ByVal Value As Integer) _ContractId = Value End Set
End Property _ Public Property AppendixTech() As String Get
Set(ByVal Value As String) _AppendixTech = Value End Set
Imports WcfService Public Class Contract_BL
Public Function DMS_Contract_GetById(ByVal Id As Integer) As _ContractInfo
Dim ctr As New DMSContractController() Return ctr.GetById(Id)
End Function Public Function DMS_Contract_GetAll() As List(Of _ContractInfo) Dim ctr As New DMSContractController()
Return ctr.GetAll() End Function
Public Function DMS_Contract_GetbyStaffId(ByVal id As Integer, ByVal type As Integer) As List(Of _ContractInfo)
Dim ctr As New DMSContractController() Return ctr.GetByStaffId(id, type)
Public Function DMS_Contracts_Insert(ByVal obj As _ContractInfo) As Integer
Dim ctr As New DMSContractController Return ctr.Insert(obj)
Public Overrides Function DMS_Groups_GetById(ByVal Id As Integer) As IDataReader
"DMS_Groups_SelectById", Id) End Function
Public Overrides Function DMS_Groups_GetAll() As IDataReader
"DMS_Groups_SelectAll") End Function
Public Overrides Function DMS_Groups_Insert(ByVal objInfo As _GroupInfo) As Integer
Return CInt(SqlHelper.ExecuteScalar(ConnectionString,
"DMS_Groups_Insert", objInfo.Name, objInfo.Description, objInfo.Leader, objInfo.DepartmentId))
Public Overrides Sub DMS_Groups_Update(ByVal objInfo As _GroupInfo)
"DMS_Groups_Update", objInfo.Id, objInfo.Name, objInfo.Description, objInfo.Leader, objInfo.DepartmentId)
Tầng UI thực hiện các ứng dụng phía trình khách để gọi dịch vụ, đó có thể là các website khai thác dịch vụ hoặc các ứng dụng winform
Public Class frmContract Public Delegate Sub capnhat() Public Shared id As Integer
Private Sub btnThem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnThem.Click
Dim frm As New frmInputContract() frm.capnhat = New capnhat(AddressOf getdata) frm.Show()
End Sub Private Sub getdata() Dim sv As New ContractService.Service3Client()
_ContractInfoDataGridView.DataSource = sv.DMS_Contracts_GetByStaffId(frmLogin.Staff, 1) sv.Close()
Private Sub frmContract_Load(ByVal sender As System.Object, ByVal e
As System.EventArgs) Handles MyBase.Load getdata()
Xây dựng ứng dụng Gadget dùng JSON-AJAX
In this program, I developed a gadget application to call a service, referencing a lecture video by Trinh Minh Cuong, an instructor at MSDN Vietnam The service URI is set to "http://gadget.com/Gadget.svc/" and the photo URL is "http://gadget.com/photo/" The application includes variables for timer, full name label, position label, photo, run show, job, and search tags The document's state is monitored, and when it is complete, a new StaffService object is constructed to facilitate functionality.
LabelFullName = document.getElementById("fullname"); LabelPosition = document.getElementById("position"); Photo = document.getElementById("photo"); job = document.getElementById("job");
System.Gadget.settingsUI = "Settings.htm";
System.Gadget.Flýout.file = "flýout.html";
System.Gadget.onSettingsClosed = settingsClosed; runShow = true; staffService.getAllStaffIDs(); if (staffService.AllIDs != null) { //Check if AllIDs is not null if (staffService.AllIDs.length > 0) { showStaff();
} } searchTags = System.Gadget.Settings.read("searchTags"); if (searchTags='') { searchTags='admin';
} } function GetInfo() { if (timer == null) { timer = setInterval("GetInfo()", 2000);
} function StaffService() { this.xmlHttp = CreateXmlHttpRequestObject(); this.AllIDs = new Array(); this.staff = null; this.day=null }
StaffService.prototype.getAllStaffIDs = function() { var currentTime = new Date(); this.xmlHttp.open("GET", serviceURI + "/getAllStaffIDs", false); this.xmlHttp.send(); var temp = eval('(' + this.xmlHttp.responseText + ')'); this.AllIDs = temp.d;
The `getRandomStaff` function retrieves a random staff member from a list of IDs It first checks if there are any staff IDs available and, if so, generates a random index to select one The function then constructs a request to fetch the staff details using the selected ID and sends the request synchronously Finally, it processes the response to store the staff information for further use.
LabelFullName.innerHTML = this.staff.FirstName+" " +this.staff.LastName;
LabelPosition.innerHTML = this.staff.JobTitle;
Photo.src = photoURL + this.staff.Image; if (System.Gadget.Flyout.show) { addContentToFlyout();
Sử dụng IIS để hosting dịch vụ
Dịch vụ là một chương trình cần môi trường thực thi, và có nhiều phương pháp hosting dịch vụ với ưu nhược điểm riêng Trong bài viết này, tôi đã sử dụng IIS để hosting dịch vụ Để biết thêm chi tiết về việc thực hiện hosting dịch vụ WCF, bạn có thể tham khảo tài liệu [15].
3.4 Các chức năng đã thực hiện
Trong chương trình này, tôi đã áp dụng kiến thức cơ bản về WCF, thực hiện cấu hình trong file web.config, sử dụng mô hình ABC, chia sẻ DataContract, phát triển các dịch vụ tại Services và gọi các dịch vụ này từ Client.
Chương trình tích hợp vào website công ty nhằm nâng cao hiệu quả công việc, cho phép ban lãnh đạo kiểm soát tiến độ dự án và nhân viên hỗ trợ lẫn nhau trong quy trình hoạt động Bằng việc áp dụng công nghệ gadget, chương trình hiển thị công việc trên màn hình của từng nhân viên, giúp họ xác định tiến độ công việc và lập thời gian biểu phù hợp Chương trình bao gồm nhiều chức năng hữu ích để tối ưu hóa quy trình làm việc.
Tin tức đóng vai trò quan trọng đối với mọi website, đặc biệt là website của công ty Chức năng quản trị tin tức cho phép người dùng trong công ty cập nhật, chỉnh sửa, xuất bản và ngưng xuất bản nội dung một cách dễ dàng và hiệu quả.
Chức năng quản lý trang, module:
Mỗi trang web được xác định bởi một tabid và chứa nhiều module có thể được sắp xếp ở các vị trí khác nhau như trái, phải và giữa Người dùng có thể dễ dàng thêm, sửa, xóa và cập nhật thứ tự của các module và trang thông qua chương trình.
Chức năng quản lý Role, người dùng
Hệ thống người dùng bao gồm toàn bộ nhân viên trong công ty, cho phép quản trị viên quản lý người dùng, vai trò (role) và phân quyền một cách hiệu quả Phân quyền được thực hiện dựa trên từng tabid, và việc thêm, sửa, xóa vai trò và người dùng diễn ra dễ dàng.
Chức năng quản lý Hợp đồng-Khách hàng
Có 2 loại khách hàng chính: cá nhân và tổ chức Mỗi loại khách hàng có những đặc điểm thông tin khác nhau, chương trình đã cung cấp 2 loại form nhập liệu, tương ứng với các kiểu khách hàng này