Các máy tính cần được chia sẽ dữ liệu với nhau. Có nhiều công việc cần phải chia sẽ dữ liệu như: Những nhà kinh doanh cần chia sẽ dữ liệu với đối tác, bộ phận này trong công ty cần gởi dữ liệu đến bộ phận khác, các ứng dụng của người dùng này cần phải làm việc với ứng dụng của người dùng khác.
Microsoft đã nhận ra nhiều loại ứng dụng khác nhau có thể chia sẽ cùng dữ liệu như:
27 trang |
Chia sẻ: vietpd | Lượt xem: 2569 | Lượt tải: 3
Bạn đang xem trước 20 trang tài liệu Kiến thức web services, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
KIẾN THỨC WEB SERVICES
Giới thiệu về Web Services
Vấn đề chia sẽ dữ liệu
Các máy tính cần được chia sẽ dữ liệu với nhau. Có nhiều công việc cần phải chia sẽ dữ liệu như: Những nhà kinh doanh cần chia sẽ dữ liệu với đối tác, bộ phận này trong công ty cần gởi dữ liệu đến bộ phận khác, các ứng dụng của người dùng này cần phải làm việc với ứng dụng của người dùng khác.
Microsoft đã nhận ra nhiều loại ứng dụng khác nhau có thể chia sẽ cùng dữ liệu như:
Những nhà cung cấp dữ liệu, những người cung cấp dữ liệu cho thị trường chứng khoáng.
Môi trường xử lý dữ liệu giữa các đại lý trong cùng một công ty cần chia sẽ dữ liệu của khách hàng, thông tin hoá đơn.
Tích hợp các ứng dụng lớn như tích hợp giũa dữ liệu về email của công ty với dữ liệu về nhân sự.
Giải quyết bằng phát triển các ứng dụng phân tán
Phát triển ứng dụng phân tán(Distributed application Development) là nghệ thuật và kỹ thuật để lấy dữ liệu từ máy này sang máy khác. Có nhiều công nghệ cho việc xây dựng các ứng dụng có thể gởi và nhận dữ liệu. CORBA(Common Object Request Broker Architerture), RMI(Remote Method Invocation), và DCOM(Distributed Component Object Model). Những công nghệ này đa số đều có các nhược điểm, và không được sử dụng cho các môi trường không đồng nhất.
DCOM được xây dựng dựa trên COM(Component Object Model) là một chuẩn nhị phân mà hầu như không thể triển khai được bên ngoài môi trường Microsoft Windows.
CORBA là một công nghệ phân tán có thể chạy trên nhiều môi trường. Tuy nhiên vì nhiều lý do, trong đó những nhà phát triển nhận thấy sự khó khăn trong việc thực thi các ứng dụng dựa trên CORBA.
Web Services
Web service là một công nghệ phân tán gồm có những đối tượng(object) và phương thức(method) có thể được gọi lên từ bất kỳ client nào thông qua giao thức HTTP. Web service được xây dựng chủ yếu dựa trên giao thức SOAP(Simple Object Access Protocol) để hổ trợ truyền thông điệp qua tầng vận chuyển HTTP và sử dụng định dạng XML để mô tả dữ liệu. . Dữ liệu liên quan đến việc gọi phương thức và các tham số được truyền đến Web service ở định dạng XML sử dụng giao thức SOAP trên tầng vận chuyển HTTP.
Các đặc điểm của Web service
Cho phép các ứng dụng giao tiếp thông qua mạng LAN, intranet, và Internet.
Độc lập ngôn ngữ.
Độc lập giao thức.
Độc lập nền.
Một trong những thách thức lớn đối với các nhà phát triển là tích hợp ứng dụng. Tích hợp ứng dụng là kết hợp một nhóm nhiều ứng dụng và chuyển chúng thành các ứng dụng Web dễ sử dụng, thậm chí khi các chương trình này chạy trên các hệ điều hành khác nhau, được tạo ra từ các ngôn ngữ khác nhau và được xây dựng bằng nhiều mô hình đối tượng khác nhau.
Web service giao tiếp bằng cách sử dụng các giao thức Web chuẩn và các định dạng dữ liệu, như là HTTP, XML, và SOAP(Simple Object Access Protocol). Bất kỳ những hệ thống nào có hỗ trợ những chuẩn Web như vậy có thể chạy được Web service.
Web Service có thể được sử dụng cục bộ như một ứng dụng đơn lẽ, hay đuợc nhiều ứng dụng khác nhau truy xuất thông qua mạng cục bộ(LAN), intranet và internet. Bởi vì Web service được truy xuất thông qua một giao diện chuẩn, Web service cho phép các hệ thống tách biệt làm việc cùng nhau, mô hình Web service độc lập ngôn ngữ, môi trường, nền và các mô hình đối tượng.
Lợi ích khi sử dụng Web service
Liên kết lỏng(Loosely couple)
Loose couple có nghĩa là mỗi dịch vụ tồn tại độc lập với các dịch vụ khác hình thành nên ứng dụng. Điều này cho phép các phần riêng lẽ của ứng dụng được sửa chữa mà không ảnh hưởng đến những phần không liên quan, đây là một yêu cầu thực tiễn trong thiết kế các kiến trúc hướng dịch vụ(Service Oriented Architecture).
Hổ trợ cấu trúc hướng dịch vụ
Web service thể hiện sự kết hợp giữa sự phát triển dựa trên dịch vụ (service-based development) của các ứng dụng và Web. Trong mô hình SOA(Service oriented Architecture), các quy trình công việc tạo nên ứng dụng được tách biệt độc lập với nhau, dễ dàng phân tán các dịch vụ.
Dễ dàng tích hợp
Không giống như những phương pháp tích hợp khác, Web service đang được chấp nhận rộng rãi trong ngành công nghiệp phần mềm. Sự chấp nhận rộng rãi này giúp giảm bớt nỗi lo của các công ty có thể bị “lock” về công nghệ trong tương lai. Các chuẩn của Web service dể đọc, cho phép những nhà phát triển xem được chính xác những gì đang xảy ra trong hệ thống.
Dễ truy xuất
Web service được phân tán trên Internet. Web service sử dụng giao thức vận chuyển như HTTP, tác động đến các kiến trúc đang có và cho phép thông tin được yêu cầu và nhận trong thời gian thực.
Cơ sở hạ tầng Web Services
Các chuẩn và giao thức
Extend Markup Language(XML):
Là nền tảng của Web service là XML XML là ngôn ngữ định dạng đánh dấu dữ liệu ngày càng trở nên phổ biến. Tương tự như HTML, XML dựa trên các Tag. Mặc dù XML không thay thế HTML, nó là một định dạng bổ sung. HTML dùng để mô tả các nội dung mà con người có thể xem được, trong khi XML thì được sử dụng cho các xử lý của máy tính.
HyperText Tranfer Protocol(HTTP)
HTTP là một trong những giao thức được sử dụng rộng rãi nhất trên Internet. Mỗi khi trình duyệt truy xuất một trang Web, HTTP là giao thức vận chuyển đang được sử dụng.
HTTP hỗ trợ rất tốt cho các giao tiếp có request và response. Request-Response có nghĩa là khi một yêu cầu được thực hiện, và sự phản hồi cho yêu cầu đó được đáp lại ngay lập tức.
Simple Object Access Protocol(SOAP)
Giao thức truy xuất đối tượng đơn giản, được xây dựng dựa trên ngôn ngữ XML, là giao thức truyền nhận thông tin của Web service. Ở cấp độ kỹ thuật, SOAP không đưa ra cách chuyển dữ liệu mới. Chuyển dữ liệu SOAP dựa trên phương thức HTTP-POST nhưng thêm phần mô tả dữ liệu bằng XML.
Web Service Description Language(WSDL)
Là ngôn ngữ đánh dấu văn bản dựa trên XML được dùng để mô tả Web service.
Universal Description, Discovery, and Intergration(UDDI)
Thực hiện công việc đăng ký (register), tìm kiến (find) và kết hợp (bind) Web service với ứng dụng.
Các thành phần của Web service
Web service Directories
Các thư mục này để lưu trữ thông tin và nội dung của Web service được triển khai.Kỹ thuật UDDI( Universal Description, Discovery, and Integration) định nghĩa các nguyên tắc triển khai thông tin về XML Web service. Các giản đồ XML được liên kết với UDDI định nghĩa bốn loại thông tin mà chúng ta cần phải publish để XML Web service có thể truy xuất được. Các thông tin này bao gồm: Thông tin tổ chức(business information), thông tin dịch vụ(service information), thông tin liên kết( binding information), và các kỹ thuật dịch vụ(service specifications).
Web service Discovery
Sử dụng quá trình này, client định vị các tài liệu(document) để mô tả một XML Service sử dụng WSDL. Quá trình discovery hổ trợ client biết về sự tồn tại của Web Service.
Web service Description
Thành phần này cung cấp thông tin giúp client biết được về các hoạt động nào thực hiện đối với Web Service. Web Service Description là một tài liệu dạng XML để chỉ rỏ định dạng của các thông điệp mà một Web Service có thể hiểu.
Web service Wire Format
Để hổ trợ việc giao tiếp giữa các hệ thống khác nhau, XML Web service sử dụng các định dạng đường truyền mở(open wire formats). Các định dạng đường truyền mở là các giao thức có thể được hiểu bởi bất kỳ hệ thống nào có khả năng hổ trợ các chuẩn web chung như HTTP và SOAP.
H ình 3.1: Các thành phần của Web service giúp client xác định và gọi các phương thức của Web service
Giao tiếp giữa Client và Web service
Quá trình giao tiếp giữa client và Web service tương tự như việc gọi các thủ tục từ xa(RPC). Client sử dụng một đối tượng proxy của Web service trên máy cục bộ để gọi các phương thức trên Web service.
Tương tác giữa client và Web Service bao gồm các phần sau được thực hiện:
Client tạo ra một đối tượng của lớp proxy Web service trên máy của client.
Client gọi một phương thức trên đối tượng proxy.
Cơ sở hạ tầng của Web service trên máy của client đồng bộ hoá(serialize) các phương thức gọi và các tham số vào trong một thông điệp SOAP và gởi đến Web service trên mạng.
Cơ sở hạ tầng trên server của Web service (giải đồng bộ)deserialize thông điệp SOAP và tạo ra một thực thể của Web Service. Sau đó Cơ sở hạ tầng này gọi phương thức cùng các tham số(arguments) trên Web service.
Web Service thực thi phương thức và trả về giá trị cùng các tham số xuất cho cơ sở hạ tầng.
Cơ sở hạ tầng đồng bộ(serialize) giá trị trả về các tham số vào một thông điệp SOAP và gởi tới client.
Cơ sở hạ tầng trên client giải đồng bộ(deserialize) thông điệp SOAP chứa giá trị trả về và các tham số và gởi đến đối tượng proxy.
Đối tượng proxy gởi giá trị trả về và các tham số cho client.
Giao thức triệu gọi Web Services
HTTP-GET
Khi triệu gọi phương thức của Web service bằng giao thức HTTP-GET, cặp tham số tên/giá trị (name/value pairs) được truyền ngay trên địa chỉ URL.
Ví dụ: Xem xét một URL sau đây:
Dấu chấm hỏi cho biết đây là dạng triệu gọi HTTP-GET, tên của biến được truyền cho phương thức GetName là StockSymbol và có giá trị là: msft.
Kết quả trả về của phương thức là gói dữ liệu được định dạng theo ngôn ngữ XML với cấu trúc:
[value]
Ví dụ:
13
Triệu gọi phương thức của Web service bằng HTTP-GET thích hợp khi tất cả các dữ liệu được truyền có dạng cặp tham số tên/giá trị(name/value pairs), có ít thuộc tính cần truyền, và độ dài của thuộc tính ngắn. Triệu gọi bằng giao thức GET cũng được dùng khi không quan tâm đến việc bảo mật dữ liệu.
.Net Framework cung cấp một lớp tên HttpGetClientProtocol để sử dụng giao thức HTTP-GET ở phía client.
Hình3.2: Thứ tự trong lớp HttpWebClientProtocol.
HTTP-POST
Triệu gọi phương thức của Web service bằng giao thức HTTP-POST chủ yếu dựa vào phương thức chuyển dữ liệu POST của thẻ trong HTML mà chúng ta vẫn thường dùng khi Submit. Dữ liệu truyền bằng HTTP-POST có khả năng mã hoá và đóng gói đựơc số lượng dữ liệu lớn hơn HTTP-GET.
Triệu gọi bằng giao thức HTTP-POST thích hợp khi có nhiều thuộc tính hay tham số cần truyền có độ dài đáng kể. Xét về bảo mật thì HTTP-POST an toàn hơn HTTP-GET vì giao thức triệu gọi HTTP-POST có thể được mã hoá.
Giống như giao thức HTTP-GET, HTTP-POAST chỉ truyền được dữ liệu dạng cặp tham số tên/giá trị(name/value pairs).
.Net Framework cung cấp một lớp tên HttpPostClientProtocol để sử dụng giao thức HTTP-POST ở phía client.
SOAP
Chuyển dữ liệu GET/POST của HTTP chủ yếu dùng cơ chế đặt dữ liệu trong các biến theo khuôn dạng name= value. Dữ liệu chuyển đi chứa rất ít thông tin để có thể tự mô tả như kiểu dữ liệu, chiều dài, sự quan hệ với các dữ liệu khác. Để mở rộng cách chuyển dữ liệu theo giao thức nền HTTP, Microsoft và một số công ty khác như IMB, Lotus…đã xây dựng giao thức truy xuất đối tượng đơn giản SOAP(Simple Object Access Protocol). SOAP sử dụng cách mô tả dữ liệu của ngôn ngữ định dạng XML để đóng gói thông tin cần chuyển đi. SOAP tập trung vào phục vụ cho việc chuyển tham số, dữ liệu của đối tượng. SOAP là hướng thay thế tốt hơn cho những giao thức triệu gọi đối tượng phân tán trước đây như CORBA, RMI hay DCOM.
Một thông điệp SOAP được chuyển đi thường gồm có ba phần:
Envelop(thông tin gói): Chứa các mô tả về gói dữ liệu cần chuyển đi. Các mô tả này được xây dựng thông qua ngôn ngữ XML.
Encoding Rules(quy tắc mã hoá): Cho biết cách dữ liệu được sắp xếp, tuần tự hoá(serialize) và chuyển đi trên mạng.
Remote Procedure Call(Thông tin gọi thủ tục từ xa): Hỗ trợ mô tả tham số và lời gọi thủ tục của đối tượng phân tán cũng như nhận kết quả trả về từ đối tượng.
SOAP có thể được sử dụng để gởi các dối tượng phức tạp như lớp(class), cấu trúc(struct), dataset.
Một trở ngại khi sử dụng giao thức SOAP là các thông điệp dạng SOAP có chứa nhiều từ không cần thiết, bởi nó sử dụng định dạng XML. Vì vây khi băng thông(bandwidth) của đường truyền nhỏ và dữ liệu truyền không lớn và phức tạp thì có thể sử dụng giao thức HTTP-GET hay HTTP-POST.
.Net Framework cung cấp một lớp tên HttpSoapClientProtocol để sử dụng giao thức SOAP phía client.
Xây dựng, triển khai và sử dụng Web Services
Xây dựng Web service
Web Service cung cấp các chức năng cho ứng dụng client trên web. Để tạo ra Web Service, trước tiên bạn phải chọn ngôn ngữ lập trình và tạo ra một lớp để thừa kế từ System.Web.Services.WebService.
Mở VS.NET . Chọn File->New->Project để mở hộp thoại New Project.
Trong hộp thoại New Project, chọn Visual C# project trong ô Project Types. Trong ô template, chọn ASP.NET Web Service, trong ô vị trí, gõ tên và vị trí của Web Service như và nhấn OK.
H ình 3.3: Hộp thoại New Project
Hộp thoại Create New Web xuất hiện trong khi một thư mục Web được tạo ra.
H ình 3.4: Hộp thoại Create New Web
Khi bạn tạo ra ASP.NET Web Service project, trang default được thể hiện ở chế độ design, và một file .asmx được tạo ra, bạn viết code để cung cấp chức năng cho Web Service. Code được lưu trong trong file *.asmx.cs và được xem như là file code ẩn.
H ình 3.4: Màn hình project Web Services
Chọn Click here to switch to code view để viết viết các phương thức xử lý, trước mỗi phương thức phải có dòng [WebMethod] .
Ví dụ: Viết một phương thức xử lý công hai số.
[WebMethod(Description=”Add two Integer”)]
public void Add(int a, int b)
{
return a+b;
}
Triển khai Web service
Khi triển khai Web service trên Web Server, dịch vụ(service) được đưa lên trên Web và các ứng dụng client có thể truy xuất được. Web service có thể được triển khai trên Web Server bằng hai cách. Cách thứ nhất là tạo ra một Web Setup Project và cách thứ hai là copy các files Web service vào trong Web Server. Ở đây chúng ta chỉ tìm hiểu cách triển khai thứ hai.
Triển khai Web service bằng cách copy
Các bước thực hiện:
Copy các file của ứng dụng Web service vào thư mục Inetpub\wwwroot. Bạn chỉ cần copy các files .asmx, Web.config, và Global.asax vào thư mục ứng dụng và file .dll vào thư mục \bin.
H ình 3.6: Màn hình cấu hình IIS
Cấu trúc thư mục của một Web service được triển khai.
Mở Internet Services Manager từ thư mục Administrative tools.
Mở rộng nút Default Web site.
Nhấn chuột phải thư mục Web service bạn vừa copy vào thư mục wwwroot và chọn Properties từ shortcut menu để mở hộp thoại MyWebServices properties dialog box.
H ình 3.7: Hộp thoại Properties của trang web
Nhấn vào nút Create trong hộp thoại và để định dạng thư mục ảo như gốc của ứng dụng Web Service.
Sau khi định dạng ứng dụng Web Service, dịch vụ Web đã sẵn sàng để sử dụng.
Các thành phần được triển khai trong Web service
Thư mục ứng dụng Web(Web application directory) : Đây là thư mục gốc của Web service. Tất cả các file của Web service được thể hiện trong thư mục này hay các thư mục con. Cần phải định dạng thư mục ứng dụng như một ứng dụng Web IIS.
File .asmx : Đây là đường dẫn URL để các client truy xuất đến Web Service.
File .disco(tuỳ chọn): File này mô tả cơ chế discovery của Web Service.
File Web.config(tuỳ chọn): Dùng file này khi bạn muốn định dạng lại mặc định của Web service.
Thư mục \Bin: Thư mục này chứa các file nhị phân của Web service. Nếu bạn không định nghĩa lớp Web Service trong cùng file .asmx, assembly chứa lớp được thể hiện bên trong thư mục \Bin.
Sau khi triển khai Web Service trong Web Server, ứng dụng có thể định vị trí Web Service bằng cách sử dụng cơ chế Discovery.
Sử dụng Web service
Để truy xuất Web Service từ ứng dụng client, cần phải thực hiện các bước sau đây:
Thêm Web Reference vào ứng dụng client bằng cách tìm kiếm Web service muốn sử dụng.
Phát sinh một lớp Proxy của Web service.
Tạo ra một đối tượng của lớp proxy trong ứng dụng client.
Truy xuất Web service bằng cách sử dụng đối tượng proxy.
Thêm Web Reference vào ứng dụng khách
Để sử dụng các dịch vụ của Web service, trước tiên phải xác định vị trí Web service bằng cơ chế Discovery. Muốn sử dụng Web Service, người lập trình phải biết được vị trí của Web service và Web service đó có đáp ứng các yêu cầu hay không. Nếu không biết được dịch vụ đó ở đâu, có thể tìm bằng UDDI. Để hổ trợ khi tìm kiếm Web service, Visual Studio.NET cung cấp Web Reference đối với mỗi Web service được sử dụng trong Project. Web Reference là một thể hiện cục bộ(local representation) của Web Service trong project.
Chúng ta có thể thêm Web Reference vào project bằng cách sử dụng hộp thoại Add Web Reference. Hộp thoại này hổ trợ duyệt Server cục bộ, Microsoft UDDI Derectory. Hộp thoại Add Web Reference sử dụng cơ chế Discovery của Web Service để xác định vị trí các Web Service trên trang Web mà bạn cung cấp. Hộp thoại này triệu gọi URL mô tả Web service trên trang Web và hiển thị chúng. Sau khi chọn một Web Service, nhấn vào nút Add Reference để thêm Web Reference vào project.
Các bước thực hiện
Click chuột phải vào nút References trong cửa sổ Solution Explorer.
H ình 3.8: Màn hình Add Web Reference
Chọn Add Web Reference từ shortcut menu. Hộp thoại Add Web Reference xuất hiện.
H ình 3.9: Hộp thoại Add Web Reference
Trong thanh địa chỉ của hộp thoại Add Web Reference, gõ đường dẫn của Web service bạn muốn sử dụng.
H ình 3.10: Hộp thoại Add Web Reference
Phát sinh lớp Proxy
Khi nhấn vào nút Add Reference trong hộp thoại Add Web Reference, Visual Studio.NET tải mô tả dịch vụ đến máy cục bộ và phát sinh một lớp proxy của Web service. Lớp proxy của Web service chứa các hướng dẫn để gọi mỗi phương thức Web service. Thêm vào đó, lớp proxy sắp xếp(marshals) các tham số giữa Web service và ứng dụng khách. Visual Studio.NET sử dụng WSDL để tạo ra lớp proxy. Lớp proxy được mô tả trong file . wsdl. Sau khi thêm Web Reference đến một Web service và phát sinh một lớp proxy, bạn thêm một tham chiếu đến lớp proxy và tạo một đối tượng của lớp proxy trong ứng dụng khách.
Khi nhấn vào nút Add Reference, Visual Studio.NET thêm một thư mục Web Reference và các file chứa trong thư mục này vào ứng dụng khách.
H ình 3.11: Màn hình hiển thị các file trong Web Services
File .wsdl chứa lớp proxy được phát sinh bởi Visual Studio.NET. Lớp này chứa các hướng dẫn để gọi các phương thức của Web Service.
IV.2.3.3. Tạo một đối tượng của lớp Proxy
Lớp proxy được phát sinh bằng cách thêm một tham chiếu đến Web service được định nghĩa trong namespace của chính nó. Bạn cần phải thêm(using) namespace của lớp proxy trong ứng dụng khách trước khi tạo một đối tượng của lớp proxy. Sau khi thêm namespace của lớp proxy trong ứng dụng, chúng ta có thể tạo ra đối tượng của lớp proxy bằng cách sử dụng toán tử new. Đối tượng của lớp proxy cho phép gọi các phương thức của Web service và truy xuất các kết quả giống như bất kỳ các phương thức khác của một thành phần.
Trong hộp thoại Add Web Reference, tên mặc định của Web Service là localhost, chúng ta có thể đổi tên theo ý nghĩa của Web Service đó.
Ví dụ: Tên của Web Service là ErrorService, và chúng ta cần tạo ra đối tượng của lớp Proxy.
using Applicationname.ErrorService;
Service1 service = new Service1();//Service1 là tên của file .asmx trong Web Service.
Truy xuất Web Service sử dụng một đối tượng proxy
Đối tượng của lớp proxy chuyển đổi các phương thức được gọi trên Web Service thành một thông điệp yêu cầu và thông điệp phản hồi để trả về giá trị mà chúng ta có thể truy xuất trong ứng dụng.
Bảo mật
Là một phần của .NET Framework, ASP.NET có một cở sở hạ tầng bảo mật rất vững chắc. ASP.NET được xây dựng để làm việc với Microsoft Internet Information Service(IIS), Window 2000, XP, 2003 và filesystem NTFS. Do đó, có sự tích hợp chặt chẽ với cơ chế bảo mật trong các môi trường trên.
Vai trò cơ bản của bảo mật trong ASP.NET là giới hạn có lựa chọn truy xuất đến các phần của trang Web bằng các phương thức sau:
Authentication: Xác nhận client.
Authorization: Quyết định client được quyền truy xuất đến tài nguyên nào mà client đó yêu cầu.
Hình 3.12: Tổng quan về bảo mật.
Authentication
Authentication là bước đầu tiên trong ba chức năng nền tảng để bảo mật ứng dụng Web. Authentication được thực hiện bằng cách sử dụng credentials, hay một số dạng nhận diện. Client phải cung cấp credentials cho IIS và ứng dụng ASP.NET, thường là username và password.
Credentials sau đó được xác nhận quyền dựa vào sự cấp quyền(authority). Dựa vào cách mà Authentication được