Introduction Windows Communication Foundation Part2

Bài viết này được dịch từ Chapter 25 - INTRODUCING WINDOWS COMMUNICATION FOUNDATION của sách Pro C# 2008 and the NET 3.5 Platform Fourth Edition.

The Role of WCF


- Như đã trình bày trong phần trước, việc có quá nhiều công nghệ distributed làm cho developer khó khăn trong việc lựa chọn. Thậm chí khi đã chọn được một công nghệ nào đó để sử dụng, việc build, maintain và config cho application cũng không mấy dễ dàng. Vì thế trước khi có .NET 3.0, rất khó để có thể “plug and play” các distributed API mà không có sự chuẩn bị cẩn thận từ trước. Ví dụ như bạn đang build hệ thống của mình bằng .NET remoting APIs, nhưng sau đó lại thấy rằng XML web services là giải pháp tốt hơn, khi đó có lẽ bạn phải chịu khó code lại.:bbpcuoi3:

- WCF là một distributed computing toolkit được giới thiệu trong .NET 3.0, nó có thể tổng hợp các công nghệ distributed trước đó. Khi sử dụng WCF, bạn có thể expose services của mình cho người khác mà không cần quan tâm xem người ta sử dụng công nghệ gì. Ví dụ như bạn đang build một “in-house” application, các máy trong hệ thống của bạn đều sử dụng hệ điều hành Windows, khi đó bạn có thể dùng nhiều TCP protocols khác nhau mà WCF hỗ trợ để được hiệu năng cao nhất. Đồng thời, service đó cũng có thể được expose ra ngoài bằng XML web service protocol để người khác có thể gọi các functions của service này mà không cần biết họ sử dụng ngôn ngữ lập trình nào cũng như chạy hệ điều hành gì.

An Overview of WCF Features


- Có thể sử dụng và phối hợp các APIs khác nhau mới chỉ là 2 chức năng nhỏ của WCF. Thêm vào đấy, WCF còn bổ trợ các kĩ thuật remoting mà nó expose. Các chứng năng đó như sau:
  • Hỗ trợ strongly typed cũng như untyped message. Hướng tiếp cận này cho phép các .NET application có thể dùng chung các custom types rất hiệu quả. Trong khi đó các software được build trên những platform khác như J2EE có thể hiểu được các loosely typed trong XML.
  • Hỗ trợ nhiều kiểu bindings khác nhau (HTTP, TCP, MSMQ, và named pipes) cho phép bạn chọn hình thức transport data hợp lý nhất.
  • Hỗ trợ các chuẩn web service specification mới nhất (WS-*)
  • Khả năng kết hợp toàn diện các mô hình bảo mật của Win32/.NET và các kĩ thuật bảo mật khác được xây dựng dựa trên những tiêu chuẩn của web services.
  • Hỗ trợ quản lý session state và cả mô hình "one-way stateless" message
- Không chỉ có những chức năng kể trên, WCF còn hỗ trợ tracing và logging, performance counters, publish và subscribe event model, hỗ trợ transaction và nhiều thứ khác.

An Overview of Service-Oriented Architecture


- Một lợi ích khác của WCF là nó hoàn toàn dựa trên một design principles nổi tiếng là Service – oriented architecture (SOA). SOA là một mô hình thông dụng trong ngành phần mềm và mô hình này có thể được hiện thực bằng nhiều cách. Đơn giản nhất, SOA là một cách để design một hệ thống distributed mà trong đó có nhiều service có thể tự hoạt động độc lập, giao tiếp với nhau bằng cách truyền đi các message dựa trên các interfaces đã được xác định trước. (“well – defined interfaces”)

- Trong công nghệ WCF, cụm từ “well – defined interfaces” được tạo ra bằng các CLR interface types. Tuy nhiên theo một nghĩa rộng hơn, interface của một service đơn giản chỉ mô tả một tập các chức năng có thể được gọi từ “external callers”

- Khi WCF được thiết kế ra, WCF team đã follow 4 tenets (tạm dịch là tiêu chí) của SOA design principles. Trong khi các tiêu chí này được tuân thủ tự động trong lúc build các WCF application, việc hiểu rõ được 4 nguyên tắc cốt yếu của SOA có thể giúp cho WCF tiến xa hơn nữa. Phần dưới đây sẽ giới thiệu 1 chút về các tiêu chí này:

Tenet 1: Boundaries Are Explicit
- Tiêu chí này lặp lại một sự thật rằng những chức năng của một WCF service được xác định thông qua các “well – defined interfaces”. Cách duy nhất để một application khác giao tiếp với một WCF service là thông qua các interfaces, và chương trình gọi client này sẽ không hề biết các service đó được xử lý như thế nào.

Tenet 1: Service Are Autonomous
- Khi nói rằng các service là những thực thể tự trị, chúng ta đang nói đến một sự thật rằng một WCF service là một chương trình có thể hoạt động độc lập với các vấn đề liên quan đến version, deployment và installation. Đế giải thích rõ hơn điều này, chúng ta hãy quay lại khía cạnh tiêu biểu của interface-based programming. Khi một interface được tạo ra, nó không nên bị thay đổi. Khi bạn muốn mở rộng một số chức năng nào đó trong WCF service của bạn, hãy tạo ra một interface khác cho các chức năng mới.

Tenet 3: Services Communicate via Contract, Not Implementation
- Tiêu chí thứ 3 này là một hệ quả của interface-based programming, trong đó những xử lý chi tiết của một WCF service không hề có một ảnh hưởng lớn đối với các externall caller. Các WCF clients giao tiếp với nhưng services duy nhất thông qua các interfaces được service expose. Hơn nữa, nếu những chức năng của service interface có sử dụng những custom types, thì các custom types này cần được khai báo chi tiết trong “data contract” để đảm bảo rằng mọi callers có thể map dữ liệu vào một data structure nào đó.

Tenet4: Service Compatibility Is Based on Policy
- Bởi vì các CLR interface cung cấp các strongly typed contracts cho tất cả WCF clients (và rất có thể được sử dụng đế generate WSDL liên quan dựa trên kiểu binding), rất quan trọng để thấy rằng một mình các interfaces/WSDL không đủ ý nghĩa để diễn tả những gì mà một service có thể làm được. Nói như vậy, SOA cho phép chúng ta định nghĩa các “policies” đế từ đó bổ xung cho các service (chẳng hạn như yêu cầu về bảo mật để có thể sử dụng được service). Khi sử dụng các policies này, chúng ta có thể tách rời giữa phần mô tả service (the exposed interfaces) ra khỏi những mô tả về cách chúng hoạt động và cách chúng được gọi.

*** Hi vọng là bài học về lịch sử công nghệ này đã giải thích vì sao WCF là một lựa chọn tốt hơn để build những distributed application sử dụng .NET 3.0 hoặc cao hơn. Bất khi nào bạn định build một “in-house” application sử dụng TCP protocol, trao đổi thông tin giữa các chương trình trong cùng một máy bằng named pipies, hoặc expose dữ liệu cho các application khác nhờ vào web service protocols, WCF luôn là API được recommended.:bbpraroi:
Các bạn đang xem bài viết Introduction WCF từ blog của Nguyễn Thoại (http://nthoai.blogspot.com)

- Nói thế không có nghĩa là bạn không thể sử dụng các công nghệ distributed của của .NET như Webservices/ .NET remoting. Thực sự trong vài trường hợp bạn sẽ buộc phải chọn công nghệ cũ. Trong trường hợp bạn đã sử dụng các công nghệ cũ cho một vài projects, bạn sẽ thấy rằng WCF rất dễ học, WCF cũng sử dụng file xml config, .NET attributes và những tool để generate các lớp proxy.:bbpxtay:

Investigating the Core WCF Assemblies


- Toàn bộ framework WCF được đặt trong một số .NET assemblies installed trong GAC. Bảng dưới đây mô tả sơ bộ role của từng WCF assemblies mà bạn cần để build bất kì WCF application nào.:bbpraroi:
  • System.Runtime.Serializtion.dll: định nghĩa các namespace và các types được sử dụng để serializing và deserializing các objects bên trong WCF framework.
  • System.ServiceModel.dll: là core assembly chức các types sử dụng để build các kiểu WCF application.
- Hai assemblies trên định nghĩa một số namespace và types, trong số đó có các namespaces quan trọng mà chúng ta nên biết:
  • System.Runtime.Serialization: định nghĩa một số types được dùng để control việc serizlize và deserialize bên trong WCF framework
  • System.Service.Model: là namespace chính trong đó định nghĩa các loại binding và hosting cũng như các types liên quan đến security và transactional.
  • System.ServiceModel.Configuration: định nghĩa một số types cung cấp chức năng access vô file config của WCF.
  • System.ServiceModel.Discription: định nghĩa các types cung cấp một object model để các “addresses, bindings và contracts” của WCF có thể được định nghĩa trong các file config.
  • System.ServiceModel.MsmqIntegration: bao gồm các types để tương tác với MSMQ service
  • System.ServiceModel.Security: định nghĩa một số kiểu để control security trong WCF

A brief word regarding cardspace


- Ngoài 2 assemblies kể trên, WCF còn giới thiệu một assembly thứ 3 là System.IdentityModel.dll. Trong assembly này bạn sẽ tìm thấy một số namespace và types khác hỗ trợ WCF CardSpace API. Công nghệ này cho phé bạn sử dụng và quản lý digital identities bên trong một WCF application. Về bản chất, CardSpace API cung cấp một mô hình thống nhất đối với các vấn đề về security trong WCF applications, chẳng hạn như caller identity, user authentication/authorization services. (Document về CardSpace API có thể tìm thấy trong .NET Framework 3.5 SDK)

The Visual Studio WCF Project Templates


- Khi bạn muốn build một WCF service, bạn hoàn toàn được phép chọn kiểu project là Class Library rồi sau đó reference đến các WCF assemblies kể trên. Ngoài ra, bạn có thể tạo một WCF service bằng cách chọn kiểu project là WCF Service Library project template trong VS.NET 2008. Project template này sẽ tự động set các references đến những WCF assemblies cần thiết; tuy nhiên, nó còn tự động generate một số “started code” cho những ai chưa quen.:bbpraroi:

The Visual Studio 2008 WCF Service Library project template

Hình 1: The Visual Studio 2008 WCF Service Library project template

- Một lợi ích khác khi chọn WCF Service Library project template là nó còn giúp bạn sinh ra 1 file app.config, điều này có thể hơi lạ khi output của project này là một dll chứ không phải 1 file excutable. Tuy nhiên, file config này rất hữu dụng khi bạn muốn debug hoặc run WCF Service Library projet, VS.NET IDE sẽ tự động chạy WCF Test Client application. Chương trình client test này (WcfTestClient.exe) sẽ đọc những setting trong file app.config để host server của bạn trước khi test. Nội dung của file config này là những setting cơ bản nhất cho một WCF service. Bạn có thể copy và paste những config này vào file config của chương trình WCF hosting chính.

- Ngoài Service library template trên, category WCF project trong menu New Project của VS.NET 2008 còn có hai project WCF template kết hợp Windows Workflow Foundation vào WCF service và một template để build một RSS library.
Các bạn đang xem bài viết Introduction WCF từ blog của Nguyễn Thoại (http://nthoai.blogspot.com)

The WCF Service Website Project Template



- Có một template khác về WCF trong VS.NET 2008 mà bạn sẽ thấy trong New Web Site dialog box như hình dưới đây:

The Visual Studio 2008 web-based WCF Service project template

Hình 2: The Visual Studio 2008 web-based WCF Service project template


- Template này rất có ích khi bạn muốn tạo một WCF service sử dụng web service protocol. Lựa chọn này sẽ tự động tạo một IIS virtual directory để host các WCF program files, tạo file web.config để expose server thông qua HTTP, và file svc. Theo cách này, web-based WCF Service project rất tiết kiệm thời gian vì IDE đã tự động setup mọi thứ cần thiết.

- Ngược lại, nếu bạn muốn build một WCF service bằng WCF Service Library template, bạn sẽ có thể host service của mình theo nhiều cách khác nhau thay vì trong IIS như trên (custom host, Windows service, …)

The Basic Composition of a WCF Application


- Tóm lại, khi bạn muốn sử dụng công nghệ WCF để build các hệ thống distributed, về cơ bản bạn phải tạo ra ít nhất 3 assemblies::bbpnghi:
  • WCF Service assembly: dll này sẽ chứa những classes và interfaces để mô tả các chức năng mà service của bạn muốn expose ra bên ngoài.
  • WCF Service host: chương trình này được dùng để host WCF service assembly
  • WCF Client: Chương trình này sẽ gọi các chức năng của WCF service trên
- Như đã nói, WCF service assembly là một .NET class library chứa một số các WCF contracts và code implementation. Assembly "Service host" lại chính xac là một .NET excutable application. Các bạn sẽ thấy rằng WCF service có thể được host trong bất kì loại application nào (Windows Forms, Windows service, WPF applications, …) Khi bạn muốn build một kiểu host application của mình, bạn phải sử dụng đến class ServiceHost cũng như một số file config liên quan. Tuy nhiên, nếu bạn đang sử dụng IIS để làm host cho WCF service, bạn không cần phải build một custom host làm gì.:bbpraroi:

- Assembly cuối cùng là một chương trình nào đó muốn gọi các service WCF và nó có thể là bất cứ dạng .NET application nào. Tương tự như chương trình host WCF service, client application cũng phải có sử dụng những file config để mô tả cách call các service trong WCF service host.

- Hình dưới mô tả (một cách high-level) mối quan hệ giữa những assemblies trên với nhau:

A high-level look at a typical WCF application

Hình 3: A high-level look at a typical WCF application

- Chúng ta cũng nên biết rằng việc sử dụng các file config là optional. Nếu muốn, chúng ta có thể hard-code chương trình host cũng như chương trình client các setting về (endpoints, binding, address, etc). Vấn đề chính khi làm như vậy là khi muốn thay đổi gì đó, bạn phải code lại, build lại và deploy lại một số assemblies. Khi sử dụng file config, hệ thống sẽ tương đối flexible. Ta chỉ cần update lại nội dung file config rồi restart lại application.:bbpskien:


(Còn tiếp)

Posted in Labels: , , |

3 comments:

  1. loplop Says:

    bạn oi làm thế nào để đổi hình nen cho blogger vậy

  2. Unknown Says:

    Anh cho em hỏi 1 tí về việc tạo file setup trong Visual Studio, em có 1 project chứa các window application form có add service reference với 1 project chứa các wcf service library. Nhưng khi tạo file setup, cài đặt xong thì chạy chương trình nó không kết nối được với database và báo không kiếm được URI của WCF service library. Xin anh chỉ giáo 1 chút về vấn để này. Cám ơn anh.

  3. Tara Eaton Says:

    I really enjoyed your blog posts thank you.

rss
 

About Me

Place I've live
Near Bossley Park, Sydney, NSW, Australia
Place I've work
  • Freelancer (from 06/2010 to present)
  • Harvey Nash (from 05/2008 to 06/2010)
  • DataDesign Vietnam (10/2005 to 04/2008)
Place I've studied
  • University of Natural Science (Bachelor of Science HoChiMinh City Vietnam From 2001 to 2005)
  • Le Hong Phong High School (HoChiMinh City Vietnam From 1997 to 2000)