BasicHTTPBinding Là Liên kết Binding mà các điểm cuối dịch vụ có thể sử dụng để liên lạc với các ứng dụng khách và dịch vụ web ASMX NetMsmqBinding Là Liên kết Binding mà các điểm cuối
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN QUANG HÙNG
SỬ DỤNG CÔNG NGHỆ WINDOWS COMMUNICATION FOUNDATION TRONG CÁC
ỨNG DỤNG TRÊN DIỆN RỘNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2009
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
NGUYỄN QUANG HÙNG
SỬ DỤNG CÔNG NGHỆ WINDOWS COMMUNICATION FOUNDATION TRONG CÁC
ỨNG DỤNG TRÊN DIỆN RỘNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
Cán bộ hướng dẫn: ThS Đào Kiến Quốc Cán bộ đồng hướng dẫn: ThS.Nguyễn Xuân Hoàng
HÀ NỘI - 2009
Trang 3TÓM TẮT KHÓA LUẬN
Hiện nay đã có rất nhiều phần mềm dành cho doanh nghiệp Tuy nhiên một số các phần mềm này lại có giá quá cao khiến doanh nghiệp không đủ kinh phí để triển khai Còn đối các sản phẩm giá thấp hơn thì lại không thể đáp ứng được nhu cầu sử dụng dữ liệu tập trung và tổng hợp dữ liệu một cách thường xuyên của các doanh nghiệp có nhiều chi nhánh tại nhiều vị trí địa lý khác nhau
Nội dung của khóa luận này sẽ trình bày về một công nghệ mới nằm trong NET 3.0 của Microsoft, đó là công nghệ Windows Communication Foundation (WCF) Đây là một công nghệ được Microsoft đưa ra để xây dựng các ứng dụng theo kiến trúc hướng đối tượng (SOA) Đó là chìa khóa để giải quyết các vấn đề trên Đồng thời, khóa luận cũng nói đến việc áp dụng WCF để xây dựng phần mềm Quản lý quan hệ khách hàng (CRM) – một giải pháp đang được áp dụng ở khá nhiều doanh nghiệp
Trang 4MỤC LỤC
LỜI MỞ ĐẦU 8
1 Tính cấp thiết của đề tài: 8
2 Mục tiêu của đề tài: 10
CHƯƠNG 1: CÔNG NGHỆ WINDOWS COMMUNICATION FOUNDATION 13
1.1 Tổng quan về Windows Communication Foundation 13
1.1.1 Windows Communication Foundation là gì? 13
1.1.2 Tại sao sử dụng WCF? 14
1.2 Kiến trúc của Windows Communication Foundation 16
1.2.1 Hợp đồng (Contracts) 17
1.2.2 Dịch vụ thực thi (Runtime service) 18
1.2.3 Bản tin (Message) 19
1.2.4 Chứa và kích hoạt (Host and activation) 19
1.3 Các tính năng của WCF 19
1.3.1 Giao dịch (Transaction) 19
1.3.2 Chứa (Host) 20
1.3.3 Bảo mật (Security) 20
1.4 Mô hình lập trình với WCF 20
1.4.1 Các phương pháp lập trình 21
1.4.2 Nguyên lý ABCs 26
1.4.3 Địa chỉ (Address) 26
1.4.4 Liên kết (Binding) 29
1.4.5 Hợp đồng (Contract) 33
CHƯƠNG 2: GIỚI THIỆU GIẢI PHÁP CRM CHO DOANH NGHIỆP 45
2.1 CRM là gì? 45
2.2 Lịch sử học thuyết CRM 47
2.3 Các khái niệm liên quan trọng trong CRM 49
2.3.1 Tiềm năng 49
2.3.2 Tổ chức 49
2.3.3 Liên hệ 49
2.3.4 Cơ hội 49
2.3.5 Chiến dịch 49
2.3.6 Hợp đồng 49
2.3.7 Tình huống 49
2.3.8 Sản phẩm 50
2.3.9 Đối tác 50
2.3.10 Đối thủ 50
2.4 Lợi ích của CRM 50
CHƯƠNG 3: SỬ DỤNG CÔNG NGHỆ WCF ĐỂ XÂY DỰNG HỆ THỐNG CRM WCF 2010 52
3.1 Vấn đề đặt ra 52
3.2 Tổng quan về CRM WCF 2010 54
3.3 Quy trình tác nghiệp của CRM WCF 2010 56
3.3.1 Quy trình tiếp thị 56
3.3.2 Quy trình Bán hàng 57
3.3.3 Quy trình dịch vụ sau bán hàng 58
Trang 53.4 Các use case chính của hệ thống CRM WCF 2010 59
3.4.1 Quản lý tổ chức 59
3.4.2 Quản lý cơ hội 60
3.4.3 Quản lý hợp đồng 61
3.4.4 Quản lý tiềm năng 62
3.4.5 Quản lý chiến dịch 64
3.4.6 Quản lý báo cáo 65
3.5 Biểu đồ tuần tự của hệ thống 66
3.5.1 Thêm, sửa tổ chức 66
3.5.2 Xóa tổ chức 66
3.5.3 Thêm, sửa tiềm năng 67
3.5.4 Xóa tiềm năng 67
3.5.5 Thêm, sửa cơ hội 68
3.5.6 Xóa cơ hội 68
3.5.7 Thêm, sửa hợp đồng 69
3.5.8 Xóa hợp đồng 69
3.5.9 Thêm, sửa liên hệ 70
3.5.10 Xóa liên hệ 70
3.5.11 Thêm, sửa chiến dịch 71
3.5.12 Xóa chiến dịch 71
3.5 Kiến trúc và công cụ phát triển CRM WCF 2010 72
3.5.1 Kiến trúc của CRM WCF 2010 72
3.5.2 Môi trường phát triển CRM WCF 2010 73
3.6 Giao diện minh họa các phân hệ chính của CRM WCF 2010 73
3.6.1 Phân hệ Tổ chức 73
3.6.2 Phân hệ liên hệ 75
3.6.3 Phân hệ cơ hội 76
KẾT LUẬN 78
TÀI LIỆU THAM KHẢO 78
Trang 6BẢNG CÁC KÝ HIỆU VIẾT TẮT
SOA Service-oriented architecture Kiến trúc hướng dịch vụ
Hình 1 1: Kiến trúc của mô hình CORBA 7
Hình 1 2: Kiến trúc của mô hình EJB 7
Hình 1 3: Kiến trúc của mô hình DCOM 8
Hình 1 4: Kiến trúc cơ bản của SOA 9
Hình 1 5: Kiến trúc NET 3.0 11
Hình 1 6: Khả năng hợp nhất của WCF 13
Hình 1 7: Kiến trúc của WCF (microsoft.com) 15
Hình 1 8: Mô hình lập trình WCF 24
Hình 1 9: Sơ đồ lựa chọn Binding 31
Hình 1 10: “Khách hàng là trung tâm của mọi hoạt động” 45
Hình 1 11: Quy trình chung của hệ thống CRM 51
Trang 7Hình 1 16: Sơ đồ use case quản lý cơ hội 58
Hình 1 17: Sơ đồ use case quản lý hợp đồng 59
Hình 1 18: Sơ đồ use case quản lý tiềm năng 60
Hình 1 19: Sơ đồ use case quản lý chiến dịch 62
Hình 1 20: Sơ đồ use case quản lý báo cáo 63
Hình 1 21: Biểu đồ tuần tự thêm ,sửa tổ chức 64
Hình 1 22: Biểu đồ tuần tự xóa tổ chức
Trang 8LỜI MỞ ĐẦU
1 Tính cấp thiết của đề tài:
Hiện tại đã có rất nhiều phần mềm dành cho các doanh nghiệp ra đời nhằm nâng cao hiệu quả kinh doanh Tuy nhiên do tính phức tạp và không đồng nhất của các nền tảng công nghệ hiện nay nên việc các doanh nghiệp tái sử dụng các hệ thống cũ và vấn đề giao tiếp giữa các hệ thống khác nhau chưa thể đáp ứng được Đồng thời với các doanh nghiệp muốn triển khai các hệ thống ứng dụng của mình trên diện rộng với nhiều chi nhánh thì vẫn gặp nhiều khó khăn do các phần mềm chưa đáp ứng được vấn đề bảo mật khi trao đổi thông tin qua môi trường Internet cũng như khó khăn trong việc triển khai và quản lý hệ thống Điều này dẫn đến doanh nghiệp nói chung và nhà quản lý doanh nghiệp nói riêng gặp rất nhiều khó khăn và không thể tập trung thời gian cho việc quản lý và hoạch định chiến lược kinh doanh cho doanh nghiệp Ví dụ, với các doanh nghiệp đa chi nhánh thì hiện tại việc thống kê, hạch toán sẽ phải thực hiện riêng rẽ trên từng chi nhánh rồi mới được người quản lý tổng hợp lại, điều này gây lãng phí thời gian và công sức, đồng thời có thể gây thiếu đồng
bộ về thông tin giữa các chi nhánh
Các kiến trúc phân tán đã ra đời để giải quyết vấn đề này như CORBA, EJB, DCOM Tuy nhiên chúng vẫn còn khá hạn chế và chưa đáp ứng được nhu cầu của khách hàng
CORBA - Common Object Requesting Broker Architecture
- CORBA được định nghĩa bởi Object Management Group (OMG) là một kiến trúc phân tán mở, độc lập nền tảng và độc lập ngôn ngữ Với CORBA các thành phần của hệ thống có thể được viết trên nhiều ngôn ngữ và chạy trên các nền tảng khác nhau vẫn có thể làm việc được với nhau
- Ưu nhược điểm của CORBA là các lập trình viên có thể chọn bất kỳ ngôn ngữ, nền tảng phần cứng, giao tiếp mạng và các công nghệ để phát triển mà vẫn thỏa mãn các tính chất của CORBA Tuy nhiên, CORBA có một số nhược điểm là: nó là ngôn ngữ lập trình bậc thấp, rất phức tạp, khó học, và cần một đội ngũ phát triển có kinh nghiệm Ngoài ra các đối tượng CORBA cũng khó tái sử dụng
Trang 9Hình 1 36: Kiến trúc của mô hình CORBA
EJB - Enterprise JavaBeans
- Kiến trúc EJB là một kiến trúc thành tố bên phía máy chủ dùng cho việc phát triển
và triển khai các ứng dụng phân tán hướng đối tượng cỡ vừa và lớn
- EJB là một kiến trúc tốt cho việc tích hợp các hệ thống vì nó là độc lập nền tảng nhưng nó cũng gặp vấn đề là: nó không phải một chuẩn mở, khả năng giao tiếp với các chuẩn khác vẫn còn hạn chế
Hình 1 37: Kiến trúc của mô hình EJB
Trang 10 DCOM - Distributed Component Object Model
- DCOM là một mô hình phân tán dễ triển khai với chi phí thấp Mô hình Component Object Model (COM) định nghĩa cách thức các thành phần và Client liên lạc trao đổi với nhau trong cùng một máy DCOM mở rộng COM bằng cách sử dụng các giao thức mạng chuẩn khi cần trao đổi dữ liệu với máy khác trên mạng DCOM hỗ trợ kết nối giữa các đối tượng và các kết nối này có thể thay đổi khi ứng dụng đang chạy
- DCOM mang đến nhiều ưu điểm như tính ổn định, không phụ thuộc vị trí địa lý, quản lý kết nối hiệu quả và dễ dàng mở rộng, là một lựa chọn tốt cho các doanh nghiệp sử dụng công nghệ trên Windows để chạy các ứng dụng có yêu cầu cao về sự chính xác và ổn định Tuy nhiên các công nghệ của Microsoft có một nhược điểm lớn là chúng bị giới hạn trên nền tảng Windows, đặc biệt các hệ thống DCOM khó tái sử dụng và bị chặn bởi Firewall khi giao tiếp qua Internet
Hình 1 38: Kiến trúc của mô hình DCOM
2 Mục tiêu của đề tài:
Trước các khó khăn trên thì các doanh nghiệp cần có một cách tiếp cận mới để giải quyết vấn môi trường không đồng nhất và tốc độ thay đổi đến chóng mặt của thực tế trong khi phải xoay sở với nguồn ngân sách hạn hẹp và nền kinh tế khó khăn May thay, đã có một hướng tiếp cận giải quyết khá toàn diện các vấn đề trên và đã được triển khai trong thực tế Đó là “Kiến trúc hướng dịch vụ” – Service Oriented Architecture (SOA)
Kiến trúc hướng dịch vụ là một hướng tiếp cận với việc thiết kế và tích hợp các phần mềm, chức năng, hệ thống theo dạng các module Trong đó mỗi module đóng vai trò
là một “dịch vụ”, và có khả năng được truy cập qua môi trường mạng Hiểu một
Trang 11cách đơn giản thì một hệ thống SOA là một tập các dịch vụ được chuẩn hóa trên môi trường mạng và trao đổi với nhau trong ngữ cảnh một tiến trình nghiệp vụ
Hình 1 39: Kiến trúc cơ bản của SOA
SOA tách riêng phần thực hiện dịch vụ (phần mềm) với giao tiếp gọi dịch vụ Điều này tạo nên một giao tiếp nhất quán cho ứng dụng khách (client) sử dụng dịch vụ bất chấp công nghệ thực hiện dịch vụ Thay vì xây dựng các ứng dụng đơn lẻ và đồ sộ, nhà phát triển sẽ xây dựng các dịch vụ tinh gọn có thể triển khai và tái sử dụng trong toàn bộ quy trình nghiệp vụ Điều này cho phép tái sử dụng phần mềm tốt hơn, cũng như tăng sự linh hoạt vì nhà phát triển có thể cải tiến dịch vụ mà không làm ảnh hưởng đến ứng dụng client sử dụng dịch vụ
Ưu điểm của kiến trúc hướng dịch vụ
- Tái sử dụng phần mềm: Nếu gói mã mà tạo thành một dịch vụ có quy mô và kích
thước phù hợp sau đó nó có thể được tái sử dụng cho lần kế tiếp, một đội phát triển cần chức năng cụ thể đó cho một ứng dụng phần mềm mới mà nó mong muốn xây dựng Họ không cần biết bất cứ thứ gì về việc mã được gói chặt như thế nào hay nó
có nguồn gốc từ đâu Tất cả những thứ mà họ cần làm đó là xây dựng một sự kết nối đến mã đó
Trang 12- Tính linh hoạt và dễ dàng triển khai: Phía triệu gọi dịch vụ không cần quan tâm
đến công nghệ nền tảng của phía Service Nó mang đến khả năng linh hoạt cao và nhiều lợi ích khác Trong một hệ thống SOA ta gọi dịch vụ thông qua các interface theo một dạng thức chuẩn nên khi cần kết nối với các đối tác thương mại thì những interface chuẩn càng đem lại nhiều lợi ích hơn Với một hệ thống SOA thật dễ dàng khi cung cáp một loạt những dịch vụ ra bên ngoài cho một đối tác nào đó sử dụng Tương tự cho điều ngược lại, nếu các đối tác đã xây dựng một hệ thống SOA thì việc đem sử dụng chức năng một số dịch vụ của họ vào sử dụng bên trong hệ thống của mình cũng thật dễ dàng và nhanh chóng
- Khả năng thích ứng cao với những thay đổi trong tương lai: Các phương pháp tiếp
cận truyền thống trong quy trình phát triển phần mềm có thể mô tả ngắn gọn là người dùng mô tả họ cần gì và công ty phát triển phần mềm sẽ triển khai theo yêu cầu Quy trình này đôi khi gặp khó khăn khi gặp những tình huống thay đổi không định trước Với SOA, công ty phát triển phần mềm có thể tạo nên những quy trình nghiệp vụ uyển chuyển , phức tạp có khả năng biến đổi tuy theo yêu cầu của khách hàng
WCF là một công nghệ được Microsoft đưa ra trong bản NET 3.0 WCF là nền tảng giúp xây dựng các ứng dụng theo kiến trúc hướng dịch vụ WCF không phải là công nghệ để hỗ trợ việc xử lý các nghiệp vụ cho ứng dụng mà nó giúp xây dựng các dịch
vụ mà việc xử lý nghiệp vụ được thực hiện bởi các ngôn ngữ lập trình quen thuộc trong NET như C# hay VB.NET WCF sẽ giúp các tầng của ứng dụng có thể gọi nhau qua môi trường Internet hay LAN Điều này giải quyết được vấn đề mở rộng phạm vi hoạt động đa chi nhánh của doanh nghiệp và giúp doanh nghiệp cũng như nhà phát triển phần mềm có thể tái sử dụng các hệ thống đang có Luận văn này sẽ giới thiệu về công nghệ WCF cùng việc sử dụng nó để xây dựng hệ thống CRM, là một hệ thống quan trọng trong việc nâng cao hiệu quả kinh doanh trong doanh nghiệp
Trang 13CHƯƠNG 1: CÔNG NGHỆ WINDOWS COMMUNICATION
FOUNDATION 1.1 Tổng quan về Windows Communication Foundation
1.1.1 Windows Communication Foundation là gì?
Windows Communication Foundation (WCF) là một công nghệ được Microsoft giới thiệu tại Hội nghị các nhà phát triển sản phẩm Microsoft (Microsoft Product Developers Conference 2003) ở Los Angeles, California năm 2003 WCF được biết đến với cái tên quen thuộc hơn là Indigo trong công cụ phát triển Visual Studio
2005
WCF là một bộ các thư viện lớp được xậy dựng trên nền tảng NET Framework 2.0 CLR và tích hợp trong NET Framework 3.0 cùng với WF, WPF và Windows Cardspace
Hình 1 40: Kiến trúc NET 3.0
WCF là công nghệ nền tảng nhằm thống nhất nhiều mô hình lập trình giao tiếp được
hỗ trợ trong NET 2.0 thành một mô hình duy nhất Vào tháng 11 năm 2005, NET 2.0 được Microsoft phát hành trong đó có cung cấp các hàm API riêng biệt cho các liên lạc dựa trên SOAP để tối đa hoá sự làm việc giữa các nền tảng sử dụng Web Services, đồng thời NET 2.0 còn cung cấp các API để tối ưu việc liên lạc dựa trên
mã nhị phân giữa các ứng dụng chạy trên hệ thống Windows gọi là NET Remoting, các API cho các giao dịch phân tán, và API cho liên lạc dị bộ WCF thống nhất các API này thành một mô hình duy nhất nhằm đáp ứng mô hình lập trình hướng dịch
Trang 14một tiến trình WCF khác, bản tin SOAP có thể được tối ưu hoá dựa trên mã hoá nhị phân
WCF không chỉ là một phương pháp khác để xây dựng hệ thống phân tán mà còn đem đến nhiều tính năng mới hơn so với các công nghệ trước đó
1.1.2 Tại sao sử dụng WCF?
Như phần trên đã trình bày, NET 2.0 hỗ trợ rất nhiều phương pháp liên lạc giữa các ứng dụng khác nhau nhằm vào các mục tiêu khác nhau Các phương pháp liên lạc này khá phức tạp và phải mất nhiều thời gian để làm chủ được công nghệ Tuy nhiên kiến thức thu được từ việc triển khai một phương pháp ít có khả năng dùng được khi làm việc với phương pháp khác
Với việc ra đời của WCF, mọi phương pháp liên lạc trước kia đều có thể thực hiện trên WCF Do vậy nhà phát triển chỉ cần làm chủ được công nghệ WCF là có thể xây dựng các ứng dụng một cách nhanh chóng
WCF là một mô hình lập trình cho phép nhà phát triển xây dựng các giải pháp dịch
vụ đảm bảo tính ổn định, và bảo mật và thậm chí là đảm bảo giao dịch Nó làm đơn giản hoá việc phát triển các ứng dụng kết nối và đưa ra cho nhà phát triển những giá trị mà có thể họ chưa nhận ra ngay, đó là cách tiếp cận phát triển hệ thống phân tán thống nhất, đơn giản, và quản lý được
Do WCF được xây dựng trên cơ sở của NET Framework 2.0 CLR, nó là tập các lớp cho phép các nhà phát triển xây dựng các ứng dụng hướng dịch vụ bằng môi trường lập trình quen thuộc của họ như VB.NET hay C#
Microsoft đưa ra WCF với kỳ vọng WCF sẽ giải quyết được ba mục tiêu:
- Hợp nhất công nghệ đã tồn tại
- Tương tác đa nền
- Phát triển hướng dịch vụ
Trang 15Hình 1 41: Khả năng hợp nhất của WCF
Mục tiêu 1: Hợp nhất công nghệ
Bài toán xử lý với các ứng dụng phân tán luôn là một bài toán khó với các nhà phát triển Sự cạnh tranh của các công nghệ phân tán đầu những năm 1990 đã dẫn đến sự tranh cãi: Sẽ chọn công nghệ nào là công nghệ tốt nhất, phù hợp nhất để phát triển
hệ thống phân tán trong thời gian dài Nếu như một hệ thống được phát triển dựa trên môi trường HTTP thì chắc chắn phải thay đổi mô hình lập trình nếu muốn triển khai trên môi trường TCP Hoặc như ta có một hệ thống xây dựng theo mô hình Web Services, hệ thống này không thể hỗ trợ các giao dịch hướng Message nếu như không thay đổi mô hình lập trình Vậy tại sao lại không có một công nghệ tập hợp tất cả những ưu điểm của các công nghệ trước đó
Microsoft đưa ra giải pháp WCF giúp giải quyết điều đó WCF tránh được việc thay đổi mô hình giao tiếp khi làm việc với nhiều công nghệ phân tán, cho phép sử dụng một API đơn giản và trong sáng
WCF tổng hợp được những gì tốt nhất của các công nghệ phân tán hiện có WCF mang đến sự hiệu quả của ASMX, xử lý giao dịch của Enterprise Service, linh hoạt của NET Remoting, ưu điểm trong hướng message của MSMQ, bảo mật của WSE Microsoft đã mang tất cả những điều đó để xây dựng một nền cơ sở công nghệ độc lập và vững chắc
Trang 16 Mục tiêu 2: Tương tác đa nền
Hầu hết các công ty phần mềm lớn đều sử dụng những giao thức riêng gắn liền với một nền tảng nhất định nào đó Mặt khác một doanh nghiệp lớn thường có các hệ thống riêng rẽ, mua ở những thời điểm khác nhau, của những công ty khác nhau Và tất nhiên chúng sẽ không tương thích tốt với nhau Việc liên kết các hệ thống lại thành một thể thống nhất và làm việc hiệu quả là một yêu cầu cần thiết
WCF sẽ làm điều đó thay vì chúng ta Thế giới công nghệ sẽ không nói chuyện với nhau bằng các ngôn ngữ khác nhau nữa, các hệ thống có thể tồn tại một cách hòa bình với nhau
Mục tiêu 3: Phát triển hướng dịch vụ
Công nghệ và nghiệp vụ thay đổi rất nhanh, doanh nghiệp phải đầu tư một lượng lớn kinh phí cho việc phát triển ứng dụng Trong nhiều năm, các lập trình viên và các tổ chức cố gắng xây dựng phần mềm trên mô hình hướng đối tượng (OOP) để phù hợp với thực tế Nhưng thiết kế hệ thống cần phải linh hoạt và chuẩn mực để việc phát triển nghiệp vụ sau này không gặp khó khăn Chính vì vậy các dịch vụ nghiệp vụ ra đời WCF là một công cụ phát triển hướng dịch vụ WCF đảm bảo các dịch vụ được xây dựng một cách tự động theo nguyên tắc SOA Điều đó đảm bảo giảm giá thành bảo trì, cho phép thay đổi và tương tác đa nền
1.2 Kiến trúc của Windows Communication Foundation
Windows Communication Foundation là một Framework trong NET 3.0 Nó gồm rất nhiều các thư viện, không gian tên (namespace) cho việc lập trình ứng dụng WCF Dưới đây là hình ảnh mô tả kiến trúc WCF và các tầng chính của nó
Trang 17Hình 1 42: Kiến trúc của WCF (microsoft.com)
1.2.1 Hợp đồng (Contracts)
Khái niệm contract trong WCF cũng giống như các hợp đồng mà ta ký trong đời sống thật Một hợp đồng ta ký có thể chứa các thông tin như kiểu công việc ta sẽ làm, và những thông tin mà ta muốn đưa ra cho các bên khác WCF contract cũng chứa các thông tin tương tự như vậy Contract định nghĩa các đặc tả trong hệ thống bản tin.Thông thường có các loại contract sau:
Data Contract: Mô tả các tham số cho các bản tin mà một dịch vụ có thể
tạo ra hay sử dụng Các tham số bản tin được định nghĩa bằng các tài liệu sử dụng ngôn ngữ đặc tả XML Schema (XSD), điều này cho phép các hệ thống hiểu XML có thể xử lý tài liệu dễ dàng Các dịch vụ khi liên lạc với nhau có thể không cần đồng ý với nhau về các kiểu, nhưng cần đồng ý về contract dữ liệu, nghĩa là đồng ý về các tham số và các kiểu trả về
Message Contract: Định nghĩa các phần có trong bản tin sử dụng các giao
thức SOAP, và nó cho phép điều khiển sâu hơn tới các phần trong bản tin khi
có yêu cầu sự chính xác như vậy
Trang 18 Services Contract: Đặc tả chi tiết các phương thức của dịch vụ, và được
phân phối như là một giao diện trong các ngôn ngữ lập trình như Visual Basic
hay Visual C# Có thể hình dung về contract dịch vụ một cách gián tiếp như
sau: “Đây là các kiểu dữ liệu của các bản tin của tôi, đây là nơi tôi cung cấp, và đây là các giao thức mà tôi có thể liên lạc”
Policy and Bindings: Mô tả các điều kiện cần có để giao tiếp với một dịch vụ
Các chính sách sẽ bao gồm cả các yêu cầu về bảo mật và các điều kiện khác cần phải có khi kết nối với một dịch vụ
1.2.2 Dịch vụ thực thi (Runtime service)
Lớp dịch vụ thực thi chứa các hành xử sẽ xảy ra trong quá trình thực hiện của dịch
vụ, nghĩa là các hành xử thực thi của dịch vụ Ta sẽ thấy một số các hành xử như sau:
Throttling behavior: Điều khiển luồng nhằm quy định xem có bao nhiêu
Transaction behavior: Hành xử giao dịch cho phép việc rollback các giao
dịch nếu xảy ra lỗi
Message inspection: Kiểm tra bản tin đem lại cho dịch vụ khả năng kiểm
tra tất cả hay một số phần của bản tin
Dispatch behavior: Khi một bản tin được xử lý bởi nền tảng WCF, dịch vụ
Dispatch behavior xác định xem bản tin được xử lý như thế nào
Concurrency behavior: Hành xử đồng thời xác định xem việc xử lý thế
nào với việc đa luồng của mỗi dịch vụ hay mỗi thực thể của dịch vụ Hành xử này giúp cho việc điều khiển số lượng luồng có thể truy nhập tới một thực thể của dịch vụ
Trang 19 Parameter filtering: Khi một bản tin được đưa tới một dịch vụ, sẽ xảy ra
một số hành động dựa trên nội dung phần đầu đề của bản tin Phần lọc tham số
sẽ thực hiện lọc các đầu đề bản tin và thực hiện các hành động đặt sẵn dựa trên
việc lọc đầu đề bản tin
1.2.3 Bản tin (Message)
Lớp bản tin là tập hợp các kênh Mỗi kênh là một thành phần xử lý bản tin theo một cách nào đó Một tập các kênh thường được gọi là ngăn xếp kênh Các kênh làm việc trên bản tin và trên đầu đề của bản tin Lớp này khác với lớp thực thi dịch vụ chủ yếu bởi sự khác nhau trong việc xử lý nội dung bản tin
Có hai kênh khác nhau là kênh vận chuyển (transport channel) và kênh điều khiển (control channel)
Kênh vận chuyển phụ trách việc đọc và ghi các bản tin từ mạng (network)
hoặc từ một số điểm giao dịch bên ngoài
Kênh điều khiển thực hiện xử lý bản tin theo giao thức, thông thường làm
việc bằng cách đọc và ghi thêm các đầu đề cho bản tin
1.2.4 Chứa và kích hoạt (Host and activation)
Nhìn một cách tổng thể thì một dịch vụ thực chất là một chương trình Cũng giống như các chương trình khác, một dịch vụ cần phải chạy trong một tệp thực thi Dịch
vụ này thường được gọi là dịch vụ tự chứa
Các dịch vụ còn có thể được chứa, hoặc chạy trong một tệp thực thi được quản lý bởi một agent bên ngoài như IIS hay Windows Activation Services (WAS) WAS cho phép WCF được kích hoạt một cách tự động khi phân phối tới một máy tính có chạy WAS
Trang 20WCF cho phép đưa vào việc xử lý giao dịch như trên với các liên lạc Nhà phát triển
có thể nhóm các liên lạc với nhau thành các giao dịch Ở mức doanh nghiệp, tính năng này cho phép bạn thực hiện các công việc giao dịch qua các nền tảng khác
nhau
1.3.2 Chứa (Host)
WCF cho phép các dịch vụ được chứa trong một số lớn các môi trường khác nhau, như Windows NT Services, Windows Forms, và ứng dụng console, cũng như ở trên IIS (Internet Information Server) và WAS (Windows Activation Services)
Chứa ứng dụng trên IIS còn có thêm các lợi điểm khác là dịch vụ có thể nhận các ưu điểm của rất nhiều tính năng có sẵn trên IIS, ví dụ IIS có thể điều khiển một cách tự động việc bắt đầu hay kết thúc một dịch vụ
1.3.3 Bảo mật (Security)
Bảo mật là tính năng không thể thiếu trong WCF nói riêng và trong liên lạc nói chung Trong WCF, tất cả mọi thứ từ các bản tin tới các client hay server đều phải xác thực và WCF có tính năng để đảm bảo rằng các bản tin không bị lẫn trong quá trình vận chuyển WCF bao gồm việc đảm bảo tính toàn vẹn và bảo mật của bản tin WCF còn cho phép bạn tích hợp ứng dụng của bạn với cơ sở hạ tầng bảo mật sẵn có, bao gồm cả các chuẩn bên ngoài môi trường Windows bằng cách sử dụng các bản tin SOAP bảo mật
Dịch vụ (Service): Chứa thông tin về vị trí của dịch vụ
Liên kết (Binding): Chứa thông tin về cách liên lạc với dịch vụ, như dịch
vụ sử dụng giao thức gì, vv
Kiểu cổng (PortType): Giải thích về dịch vụ sẽ làm gì
Trang 21Mô hình dịch vụ trên WCF cũng tương tự như với mô hình dịch vụ web Điểm khác biệt là ở cách đặt tên Trong WCF các phần không được gọi là service, binding, và portType mà được gọi tương ứng là address (địa chỉ), binding, và contract
WCF là một mô hình lập trình cho phép nhà phát triển xây dựng các giải pháp dịch
vụ đảm bảo tính ổn định, và bảo mật và thậm chí là đảm bảo giao dịch Nó làm đơn giản hoá việc phát triển các ứng dụng nối kết và đưa ra cho nhà phát triển những giá trị mà có thể họ chưa nhận ra ngay, đó là cách tiếp cận phát triển hệ thống phân tán thống nhất, đơn giản, và quản lý được
1.4.1 Các phương pháp lập trình
Có ba phương pháp hay được sử dụng khi phát triển dịch vụ WCF như sau:
Phương pháp khai báo (Declarative programming)
Phương pháp lập trình trực tiếp (Explicit programming)
Phương pháp sử dụng tập tin cấu hình
Mỗi phương pháp có ưu điểm và khuyết điểm riêng của nó Điều đặc biệt về WCF
là luôn có hơn một cách để giải quyết một vấn đề trong WCF, và ta không nhất thiết phải chọn duy nhất một phương pháp nào Trong thực tế, cách làm tốt nhất là tổ hợp các phương pháp để có được sự linh hoạt và mềm dẻo cho dịch vụ
Phương pháp khai báo (Declarative programming)
Lập trình khai báo đạt được thông qua các thuộc tính Những thuộc tính này được sử dụng để định nghĩa các contract và xác định hành xử của dịch vụ Chúng được sử dụng để xác định thêm các tham số để thay đổi các chi tiết của contract và hành xử dịch vụ
Thuộc tính ServiceContract dùng để quy định là giao diện này định nghĩa các chức năng của một dịch vụ Thuộc tính OperationContract được sử dụng ở các hàm để quy định rằng hàm này được khai báo là một phần của dịch vụ Đó là tất cả những gì cần để tạo ra một dịch vụ WCF
Thêm nữa, ta không nhất thiết phải sử dụng các giao diện (interface) khi cài đặt một dịch vụ, điều này cũng giống như việc ta không cần phải sử dụng giao diện để định nghĩa một lớp Tuy vậy ta nhất thiết phải quy định phần nào thuộc về dịch vụ Ta có thể định nghĩa những phần khác cần cho giao diện, nhưng chỉ những hàm (phương thức) có gắn thuộc tính [OperationContract]
Trang 22Ví dụ ta có một dịch vụ thực hiện phép tính cộng giữa 2 số nguyên AddInt và 2 số thực AddDouble Ta khai báo dịch vụ như sau:
vụ lại không cho phép đặt trùng tên hàm như thế Chúng ta có thể khai báo thêm với thuộc tính OperationContract để thực hiện, cách làm như sau:
double Add(double x, double y); }
Vậy là chúng ta sử dụng được phép nạp chồng tên trong C# và sử dụng thêm tham
số Name để quy định thêm tên hàm ở dịch vụ Ngoài ưu điểm trong việc giải quyết
nạp chồng tên hàm, ta còn thấy một lợi ích khác nữa là, việc quy định tham số Name
trong thuộc tính OperationContract còn cho ta thêm linh hoạt trong việc đổi tên các
hàm trong giao diện mà không làm thay đổi định nghĩa dịch vụ, nghĩa là các ứng dụng khác sử dụng dịch vụ này không cần phải biên dịch lại
Phương pháp lập trình trực tiếp (Explicit programming)
Là phương pháp lập trình hướng đối tượng, ta làm việc trực tiếp với các lớp và giao diện cung cấp bởi mô hình đối tượng của WCF Làm việc trực tiếp với mô hình đối tượng cho phép nhà phát triển tính linh hoạt cao hơn và khả năng điều khiển tốt hơn
Trang 23thông qua mã nguồn của họ Thêm nữa nó cho phép điều khiển sâu hơn rất nhiều so với phương pháp khai báo và phương pháp sử dụng tập tin cấu hình
Phương pháp sử dụng tập tin cấu hình
Cũng giống như phương pháp khai báo, có rất nhiều thứ mà ta có thể quy định liên quan đến hành xử của một dịch vụ thông qua tập tin cấu hình của dịch vụ Điều hay trong cách tiếp cận này là những thay đổi ở tập tin cấu hình hoàn toàn không cần phải biên dịch lại dịch vụ mới sử dụng được
Sau đây là ví dụ sử dụng tập tin cấu hình để định nghĩa dịch vụ tính toán trong ví dụ của phần phương pháp khai báo
Trang 24BasicHTTPBinding Là Liên kết (Binding) mà các điểm cuối dịch vụ có thể sử dụng để
liên lạc với các ứng dụng khách và dịch vụ web (ASMX)
NetMsmqBinding Là Liên kết (Binding) mà các điểm cuối dịch vụ có thể sử dụng để
liên lạc với các MSMQ khách và các dịch vụ khác
NetNamedPipeBinding Là Liên kết (Binding) mà các điểm cuối dịch vụ có thể sử dụng để
liên lạc với các ứng dụng khách/dịch vụ trên cùng một máy
NetTCPBinding Là Liên kết (Binding) mà các điểm cuối dịch vụ có thể sử dụng để
liên lạc với các ứng dụng khách/dịch vụ ở các máy khác nhau
WSHTTPBinding Là Liên kết (Binding) mà các điểm cuối dịch vụ có thể sử dụng để
liên lạc với các ứng dụng khách/dịch vụ sử dụng các giao dịch phân tán và các phiên làm việc bảo mật và tin cậy được
EndpointAddress Lớp biểu diễn địa chỉ duy nhất được cung cấp và truy xuất được
cho máy khách để liên lạc với điểm cuối dịch vụ
EndpointAddressBuilding Là phương pháp để tạo mới các địa chỉ đầu cuối với các giá trị
tham số xác định
Trang 25ChannelFactory Là phương pháp trong đó các kiểu kênh khác nhau được tạo ra và
quản lý, và đưa tới cho các ứng dụng khách để gửi bản tin tới các điểm cuối
Identity Cách mà một định danh được xác định, cho phép xác thực giữa các
điểm cuối khi trao đổi bản tin
MessageHeader Biểu diễn nội dung của một đầu đề bản tin SOAP
ServiceHost Phương pháp cung cấp vật chứa cho các dịch vụ
ReliableSession Cung cấp truy xuất tới các thuộc tính của thành phần binding trong
phiên làm việc tin cậy
Để định nghĩa việc liên lạc của dịch vụ, ta thường hay sử dụng các lớp sau
AddressHeader Phần đầu đề chưa thông tin địa chỉ được sử dụng để xác định và liên
lạc với một điểm cuối
AddressHeaderCollection Một tập hợp các đầu đề địa chỉ
Binding Tập hợp các thành phần binding, mỗi binding định nghĩa cách mà
một điểm cuối liên lạc với thế giới bên ngoài
BindingContext Cung cấp địa chỉ và thông tin binding cần thiết cho việc xây dựng
Message Một đơn vị của liên lạc giữa các điểm cuối
MessageHeader Nội dung của đầu đề bản tin SOAP
MessageHeaders Tập hợp các đầu đề bản tin
Trang 261.4.2 Nguyên lý ABCs
Chắc chắn đến đây, sẽ có nhiều người đặt ra câu hỏi: Nguyên lý ABC là gì? Thực
chất, ABC là viết tắt của ba khái niệm quan trọng trong WCF Đó là: Address,
Binding và Contract
Đơn giản hơn:
Address trả lời cho câu hỏi Where? - Xác định nơi mà lời gọi dịch vụ sẽ
gửi tới
Binding trả lời cho câu hỏi How? - Xác định cách thức mà lời gọi sẽ
được gửi đi
Contract trả lời cho câu hỏi What? - Xác định nội dung mà lời gọi sẽ
gửi đi
Hình 1 43: Mô hình lập trình WCF
Thông thường, bộ ABC được coi như một cổng giao tiếp (endpoint) với thế giới bên ngoài của dịch vụ được định nghĩa trong WCF Để mô tả về endpoint, ta dùng một tập tin đặc biệt định dạng XML đó là WSDL (Web Services Description Language) WSDL mô tả những gì dịch vụ có thể làm, cách mà từ bên ngoài có thể truy cập được dịch vụ cũng như nơi có thể tìm được dịch vụ
1.4.3 Địa chỉ (Address)
Ta phải biết địa chỉ của dịch vụ để có thể gửi được lời gọi Địa chỉ trong WCF cho
ta biết giao thức của máy chủ ứng dụng đang chạy dịch vụ cũng như đường dẫn đến dịch vụ đó Định dạng của một địa chỉ dịch vụ có cấu trúc như sau:
scheme://<machinename>[:port]/path
Trang 27Trong đó:
Machine name Tên miền của máy chủ dịch vụ
trên máy chủ Giao thức HTTP mặc định là cổng 80
Các kiểu địa chỉ
Địa chỉ điểm cuối (endpoint address):
Địa chỉ điểm cuối giống như ở ví dụ trên, một địa chỉ điểm cuối quy định địa chỉ của một điểm cuối dịch vụ cụ thể Máy khách (chương trình khách) có thể truy nhật dịch
vụ qua địa chỉ điểm cuối Ví dụ qua địa chỉ sau:
http://localhost:8080/HelloWorld
Khi máy khách truy nhập dịch vụ thông qua địa chỉ điểm cuối, máy khách có thể nói chuyện với dịch vụ và mọi liên lạc từ dịch vụ và đến dịch vụ đều thực hiện thông qua địa chỉ này
Địa chỉ cơ sở (base address):
Địa chỉ cơ sở cung cấp một cách để xác định một địa chỉ đơn nhất cho một dịch vụ
và gán các địa chỉ tương đối cho từng điểm cuối riêng lẻ Ví dụ, giả sử ta có một dịch vụ với ba điểm cuối, ta có thể gán cho dịch vụ đó một địa chỉ cơ sở như sau
http://localhost:8080/HelloWorld
Với địa chỉ cơ sở được gán cho dịch vụ, ta có thể gán cho ba điểm cuối các địa chỉ tương đối sau
http://localhost:8080/HelloWorld/8787
Trang 28http://localhost:8080/HelloWorld/8788 http://localhost:8080/HelloWorld/8789
Địa chỉ siêu thông tin (mex address):
Địa chỉ MEX cho phép một máy khách thu thập các thông tin về một dịch vụ nào
đó MEX, nghĩa là metadata exchange (trao đổi siêu dữ liệu), là một địa chỉ điểm
cuối HTTP được sử dụng để lấy thông tin về dịch vụ Ví dụ địa chỉ sau là một địa chỉ MEX:
http://localhost:8080/HelloWorld/mex
Thông tin về dịch vụ cung cấp cho máy khách thông qua địa chỉ MEX được lấy từ siêu dữ liệu của dịch vụ Siêu dữ liệu này chính là những mô tả về dịch vụ
Các định dạng địa chỉ
Khi phát triển một dịch vụ bạn cần lưu ý các điểm sau:
Môi trường chứa dịch vụ Môi trường có thể bắt buộc hoặc đòi hỏi địa chỉ phải được định dạng theo cách này hay cách khác
Nơi địa chỉ được xác định Bạn có các tuỳ chọn để lưu nó ở tệp cấu hình hoặc bạn có thể lưu luôn trong mã nguồn của chương trình của bạn
Phần này sẽ giới thiệu với bạn các định dạng địa chỉ khác nhau để bạn có thể hình dung về tính linh hoạt và các tuỳ chọn có thể có khi phát triển và phân phối dịch vụ Địa chỉ có cấu trúc chung nhưng có nhiều định dạng địa chỉ khác nhau, phân biệt qua chính giao thức trong địa chỉ
https://localhost/Service/HelloWorld
Trang 29bảo mật bằng cách sử dụng SSL (Secure Socket Layer),
và được quy định bằng https Ngoài giao thức (scheme) là
ảo cũng như tên tệp dịch vụ
http://localhost/Service/HelloWorld.svc
Khi lập trình với các địa chỉ trong Windows Communication Foundation bạn có thêm sự linh hoạt trong làm việc với các điểm cuối và dịch vụ bởi bạn hoàn toàn có thể lập trình để định nghĩa và xử lý các địa chỉ cơ sở Trong thực tế, không mấy khi các nhà lập trình tạo ra các điểm cuối và các địa chỉ điểm cuối thông qua mã nguồn
do các địa chỉ và binding bạn sử dụng trong quá trình phát triển dịch vụ thường không giống so với các địa chỉ và binding sẽ sử dụng khi phân phối dịch vụ Thông thường là ta định nghĩa các điểm cuối và các địa chỉ trong tệp tin cấu hình Tuy
nhiên WCF vẫn có lớp EndpointAddress để hỗ trợ việc lập trình các địa chỉ, điều
này làm tăng tính linh hoạt cho WCF
1.4.4 Liên kết (Binding)
Các Binding là phương pháp theo đó các chi tiết trong truyền thông được xác định
để tạo kết nối tới điểm cuối dịch vụ WCF Các Bindings trong WCF có thể thay đổi
mức độ phức tạp Các mức độ này có thể từ đơn giản nhất cho tới cực kỳ phức tạp Khi định nghĩa một binding, ta cần chỉ ra các thông tin ở trong các lĩnh vực sau:
Trang 30 Protocol (Giao thức): Định nghĩa các thông tin cần sử dụng trong binding
ví dụ như tính bảo mật, khả năng thực hiện giao dịch, hoặc khả năng truyền bản tin một cách tin cậy
Transport (Vận chuyển): Định nghĩa giao thức cơ bản được sử dụng trong
truyền thông
Encoding (mã hoá): Định nghĩa việc mã hoá được sử dụng cho các bản tin trong quá trình liên lạc
WCF cung cấp sẵn một bộ các Binding có thể đáp ứng được phần lớn cái yêu cầu về
truyền thông trong các ứng dụng phổ biến Nhưng nếu những gì mà Microsoft cung cấp vẫn chưa đủ, chúng ta hoàn toàn có thể xây dựng một kiểu binding bằng cách sử
(none) (none)
Transport, (Message), Mixed
(none), Transport, Reliable
(none), Yes
Reliable (none), Yes
Message
Reliable, (Transport) (none), Yes
(Transport) (none), Yes
Trang 31NetMsmqBinding NET
Message, (Transport), Both
(none) (none), Yes
Trong bảng trên, những giá trị để trong ngoặc là những giá trị mặc định tương ứng cho các tính năng, các tính năng được định nghĩa như sau:
Công nghệ: Định nghĩa giao thức hay công nghệ mà binding sẽ sử dụng để
đảm bảo việc trao đổi và sử dụng thông tin
Bảo mật: Xác định cách bảo mật kênh trao đổi thông tin
Phiên: Xác định việc hỗ trợ contract phiên
Giao dịch: Xác định việc cho phép hay không các giao dịch (transaction)
Dựa vào bảng đó, ta có thể đưa ra một số nhận xét Nếu yêu cầu bài toán đòi hỏi
việc tích hợp giữa các nền tảng khác nhau, ta sẽ chú ý đến cái binding với tiền tố [ws] Còn nếu môi trường làm việc bài toán là Windows thì lựa chọn các binding với tiền tố [net] có vẻ hợp lý Riêng basicHttpBinding phù hợp với những dịch vụ ra
đời trước WCF như ASMX
Khi ta chọn binding để giải quyết một vấn đề, thường ta chú ý đến xem nó hỗ trợ
Trang 32WSFederationHttpBinding Có Có Không Không
Trang 33Để dễ dàng hơn trong việc xác định binding, ta có thể dựa vào sơ đồ sau:
Hình 1 44: Sơ đồ lựa chọn Binding
1.4.5 Hợp đồng (Contract)
Các contract trong Windows Communication Foundation cung cấp khả năng làm
việc đa môi trường khi liên lạc với các máy khách Các máy khách và dịch vụ thoả thuận với nhau về các contract như kiểu của các hành động và các cấu trúc dữ liệu
mà các bên sẽ sử dụng trong quá trình liên lạc qua lại với nhau Nếu không có contract thì không thể thực hiện liên lạc được do không có sự thoả thuận thống nhất giữa các bên
Khi định nghĩa một dịch vụ trong Windows Communication Foundation ta sử dụng
ba kiểu contract cơ bản sau:
Service Contract (Contract dịch vụ): Định nghĩa các phương thức của
một dịch vụ, thực chất là các hành động mà client có thể sử dụng ở các điểm cuối (endpoint)
Data Contract (Contract dữ liệu): Định nghĩa các kiểu dữ liệu được sử
Trang 34lớp và giao diện, bằng cách thêm vào các thuộc tính mô tả (attribute) cho các lớp và giao diện đó
Có thể hình dung mối liên hệ giữa các contract với NET Framework CLR một cách
gần đúng như sau:
Service Contracts: Cung cấp thông tin để thực hiện ánh xạ từ CLR sang
WSDL (Web Service Description Language - Ngôn ngữ mô tả dịch vụ Web)
Data Contracts: Cung cấp thông tin để thực hiện ánh xạ từ CLR sang XSD (XML Schema Definition - Định nghĩa schema XML)
Message Contracts: Dùng để miêu tả cấu trúc của bản tin SOAP (Simple Object Access Protocol - Giao thức truy nhập đối tượng đơn giản)
Service Contracts (Contract dịch vụ)
Như đã nói ở phần trên, một contract dịch vụ định nghĩa các hành động hoặc
phương thức có ở điểm cuối dịch vụ (Endpoint) và được đưa ra để máy khách có thể
sử dụng Nó còn định nghĩa một cách cơ bản các phép trao đổi bản tin như việc bản
tin sẽ thế nào trong yêu cầu/trả lời (Request/Reply) hay trong liên lạc đơn công
(one-way) hoặc song công (Duplex)
Contract dịch vụ đưa ra một số thông tin cho các máy khách đủ để cho máy khách
có thể biết được dịch vụ này có thể cung cấp những gì Những thông tin đó bao gồm:
Các kiểu dữ liệu trong bản tin
Vị trí của các phương thức – hành động
Thông tin về giao thức, định đạng lưu dữ liệu để đảm bảo cho liên lạc thành công
Nhóm các hành động
Mẫu trao đổi bản tin (Message exchange pattern – MEP)
Như trên đã nói, để định nghĩa contract dịch vụ, ta sử dụng các thuộc tính mô tả cho một lớp hay giao diện Thuộc tính mô tả một contract dịch vụ là ServiceContract Ví
dụ sau định nghĩa một giao diện như là một contract dịch vụ:
[ServiceContract]
public interface IStaffInformation
{
}
Trang 35Sau đó để định nghĩa các hành động (phương thức) cho dịch vụ ta sử dụng phần mô
tả là OperationContractcho các phương thức của giao diện như ví dụ dưới đây:
[OperationContract]
bool HasPerson(int staffId);
[OperationContract]
string GetPersonName(int staffId);
Gộp các phần lại ta sẽ được một định nghĩa hoàn chỉnh cho một contract dịch vụ:
Trang 36Trong trường hợp ta không muốn định nghĩa dịch vụ ở phần giao diện, ta hoàn toàn
có thể định nghĩa dịch vụ ở trong lớp cài đặt dịch vụ đó như sau:
Trong khi định nghĩa contract dịch vụ, chúng ta đã sử dụng hai lớp thuộc tính để mô
tả là ServiceContract và OperationContract Hai thuộc tính này có rất nhiều tham số
kèm theo, tuy nhiên trong nhiều trường hợp, chúng ta hoàn toàn có thể sử dụng các giá trị mặc định của hai thuộc tính này để định nghĩa contract dịch vụ Trong một số trường hợp khi chúng ta muốn điều khiển sâu hơn về các thông tin liên quan đến dịch vụ, ta có thể đưa thêm các tham số cho hai thuộc tính này
Thuộc tính ServiceContract
Thuộc tính ServiceContract được áp dụng cho việc mô tả các giao diện hoặc các lớp
để định nghĩa một contract dịch vụ Thuộc tính này có các tham số sau:
Bảng tham số thuộc tính ServiceContract
Trang 37CallbackContract Thiết lập/Trả về kiểu của callback contract khi liên lạc ở
chế độ song công Khi liên lạc giữa máy khách và dịch vụ được thiết lập, tham số này chỉ ra rằng máy khách cần phải đợi lời gọi hàm từ phía dịch vụ thông qua kiểu của callback contract đã định nghĩa Ví dụ sau mô tả cách sử dụng tham
số CallbackContract
[ServiceContract(CallbackContract=typeof(IClientContract))] public class StaffInformation : IStaffInformation
{
}
Trong ví dụ trên, dịch vụ quy định callback contract phải có
kiểu là IClientContract
ConfigurationName Thiết lập/Trả về tên được sử dụng để xác định thành phần
dịch vụ trong tệp tin cấu hình Ví dụ về việc sử dụng tham
số ConfigurationName như sau:
Và ở tệp tin cấu hình ta có phần định nghĩa thành phần dịch
vụ với tên là DichVu
Trang 38Name Thiết lập/Trả về tên của thành phần <portType> trong
WSDL Giá trị mặc định cho tham số này chính là tên của
giao diện hay lớp có gắn thuộc tính ServiceContract Tham
số này được sử dụng trong trường hợp ta muốn thay đổi tên
của thành phần <portType>hoặc muốn giữ nguyên tên của
thành phần <portType> nhưng lại đổi tên của giao diện hay
lớp định nghĩa dịch vụ
Namespace Thiết lập/Trả về namespace (không gian tên) cho thành
phần <portType> trong WSDL Giá trị mặc định cho tham
số này là http://tempuri.org
ProtectionLevel Quy định yêu cầu về mức bảo vệ trong binding Việc quy
định này bao gồm quy định về mã hoá, chữ ký điện tử tại các điểm cuối của dịch vụ
SessionMode Quy định kiểu hỗ trợ cho các phiên làm việc tin cậy mà một
dịch vụ đòi hỏi hoặc hỗ trợ Ví dụ có thể định nghĩa đòi hỏi phải hỗ trợ phiên làm việc tin cậy cho dịch vụ như sau:
Thuộc tính OperationContract được gắn với các phương thức trong các giao diện
hay các lớp Chỉ các phương thức được gắn thuộc tính OperationContractmới được coi là phương thức của dịch vụ Các tham số có thể sử dụng cho thuộc tính này như sau:
Trang 39Bảng tham số thuộc tính OperationContract
Action Quy định hành động để chỉ ra một cách duy nhất phương
thức này WCF phân phối các bản tin yêu cầu với các phương thức dựa trên các hành động của chúng
AsyncPattern Chỉ ra rằng phương thức được cài đặt hoặc có thể gọi theo
cách bất đồng bộ sử dụng cặp phương thức bắt đầu bởi Begin và End
IsInitiating Quy định phương thức này có phải là phương thức để khởi
tạo trong một phiên hay không
IsOneWay Chỉ ra rằng phương thức này chỉ chứa một bản tin đầu vào
duy nhất Phương thức không có bản tin trả về
IsTerminating Quy định xem liệu WCF có kết thúc phiên làm việc hiện tại
sau khi phương thức này thực hiện xong hay không
vụ Giá trị mặc định của tham số này là tên của phương thức
ProtectionLevel Quy định sự bảo vệ ở mức bản tin mà một phương thức yêu
cầu khi thực hiện
ReplyAction Quy định hành động của bản tin trả lời cho phương thức
này
Ví dụ sau biểu diễn việc sử dụng các tham số của OperationContract để quy định thứ
tự thực hiện của các phương thức khi làm việc với dịch vụ Theo ví dụ này, quy trình để máy khách liên lạc với dịch vụ như sau
1 Đầu tiên máy khách cần phải gọi hàm Loginđể đăng nhập
2 Sau đó gọi hàm HasPerson hoặc GetPersonName để lấy thông tin về nhân viên