Tài liệu Khóa luận Sử dụng công nghệ windows communication foundation trong các ứng dụng trên diện rộng: ĐẠ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
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
3
TÓ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...
79 trang |
Chia sẻ: haohao | Lượt xem: 1201 | Lượt tải: 0
Bạn đang xem trước 20 trang mẫu tài liệu Khóa luận Sử dụng công nghệ windows communication foundation trong các ứng dụng trên diện rộng, để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
ĐẠ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
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
3
TÓ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.
4
MỤ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
5
3.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
6
BẢNG CÁC KÝ HIỆU VIẾT TẮT
Ký hiệu Từ viết tắt Ý nghía
SOA Service-oriented architecture Kiến trúc hướng dịch vụ
WCF Windows Communication
Foundation
Công nghệ mới của Microsoft trong
.NET 3.0
CRM Customer relationship
management
Quản lý quan hệ khách hàng
BẢNG DANH SÁCH CÁC HÌNH VẼ
Hình vẽ Trang
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
Hình 1 12: Quy trình tiếp thị 54
Hình 1 13: Quy trình bán hàng 55
Hình 1 14: Quy trình dịch vụ sau bán hàng 56
Hình 1 15: Sơ đồ use case quản lý tổ chức 57
7
Hì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 64
Hình 1 23: Biểu đồ tuần tự thêm, sửa tiềm năng 65
Hình 1 24: Biểu đồ tuần tự xóa tiềm năng 65
Hình 1 25: Biểu đồ tuần tự thêm, sửa cơ hội 66
Hình 1 26: Biểu đồ tuần tự xóa cơ hội 66
Hình 1 27: Biểu đồ tuần tự thêm, sửa hợp đồng 67
Hình 1 28: Biểu đồ tuần tự xóa hợp đồng 67
Hình 1 29: Biểu đồ tuần tự thêm, sửa liên hệ 68
Hình 1 30: Biểu đồ tuần tự xóa liên hệ 68
Hình 1 31: Biểu đồ tuần tự thêm, sửa chiến dịch 69
Hình 1 32: Biểu đồ tuần tự xóa chiến dịch 69
Hình 1 33: Kiến trúc CRM WCF 2010 70
Hình 1 34: Giao diện phân hệ Tổ chức 71
Hình 1 35: Giao diện phân hệ Liên hệ 73
Hình 1 36: Giao diện phân hệ Cơ hội 74
8
LỜ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.
9
Hì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
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
11
cá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ã đó.
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.
13
CHƯƠ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
vụ.
WCF có thể sử dụng các bản tin SOAP giữa hai tiến trình, do đó làm cho các ứng
dụng dựa trên WCF có thể làm việc với các tiến trình khác thông qua việc giao tiếp
sử dụng bản tin SOAP. Khi một tiến trình WCF liên lạc với một tiến trình không là
WCF, các bản tin SOAP được mã hoá trên cơ sở XML, nhưng khi nó liên lạc với
14
mộ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ụ
15
Hì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.
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ó.
17
Hì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.
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
bản tin được xử lý.
Error behavior: Hành xử lỗi quy định những hành động khi lỗi xảy ra
trong hệ thống.
Metadata behavior: Hành xử với các siêu dữ liệu quy định xem làm thế
nào và khi nào thì các siêu dữ liệu được đưa ra bên ngoài dịch vụ.
Instance behavior: Hành xử thực thể quy định xem có bao nhiêu thực thể
của dịch vụ đó được chạy.
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ụ.
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.
1.3. Các tính năng của WCF
1.3.1. Giao dịch (Transaction)
Một giao dịch là một đơn vị của công việc. Một giao dịch đảm bảo chắc chắn rằng
mọi thứ diễn ra trong giao dịch thành công hay thất bại đều là kết quả tổng thể. Ví
dụ, nếu một giao dịch chứa ba mục công việc cần thực hiện, trong quá trình thực
hiện giao dịch, một trong số các mục đó bị thất bại, khi đó cả ba mục sẽ là thất bại.
Giao dịch chỉ thành công khi cả ba mục công việc đều thành công. Giao dịch thường
thấy trong các thao tác với cơ sở dữ liệu.
20
WCF 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.
1.4. Mô hình lập trình với WCF
Nếu bạn đã từng làm việc với dịch vụ web, bạn sẽ thấy mô hình này quen thuộc với
bạn theo một cách nào đó. Khi bạn tạo một dịch vụ web, bạn thực sự tạo ra một dịch
vụ (service). Dịch vụ web chứa một tài liệu XML để mô tả tất cả mọi thứ cần biết về
dịch vụ đó. Tài liệu này được mô tả bằng ngôn ngữ Web Service Description
Language (ngôn ngữ mô tả dịch vụ web). Nó chứa ba phần:
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ì
21
Mô 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].
22
Ví 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:
[ServiceContract]
public interface ICalcService
{
[OperationContract]
int AddInt(int x, int y);
[OperationContract]
double AddDouble(double x, double y);
}
Như vậy dịch vụ của chúng ta sau khi khai báo sẽ có 2 phương thức (khai báo với
thuộc tính OperationContract) là AddInt và AddDouble. Tuy nhiên khi khai báo
trong C#, việc đặt tên AddInt và AddDouble, và có thể có một số hàm add cho các
kiểu dữ liệu khác, có thể rút gọn lại thành một tên hàm Add mà thôi. Nhưng các dịch
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:
[ServiceContract]
public interface ICalcService
{
[OperationContract(Name="AddInt")]
int Add(int x, int y);
[OperationContract(Name="AddDouble")]
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
23
thô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.
<service behaviorConfiguration="CalculationService.CalcServiceBehavior"
name="CalculationService.CalcService">
<endpoint address="" binding="wsHttpBinding"
contract="CalculationService.ICalcService">
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"
/>
24
Mô hình dịch vụ WCF được cung cấp trong không gian tên System.ServiceModel.
Không gian tên này chứa rất nhiều lớp, nhưng bạn hoàn toàn không cần biết toàn bộ
chúng. Để sử dụng mô hình và xây dựng dịch vụ, ta thường sử dụng một số lớp sau:
Lớp Mô tả
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 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
25
ChannelFactory 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
Lớp Mô tả
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
kênh
BindingElement Biểu diễn một thành phần binding, được sử dụng để xây dựng các
binding
CustomBinding Sử dụng để định nghĩa và xây dựng một tuỳ biến binding từ một tập
các thành phần binding
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
26
1.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://[:port]/path
27
Trong đó:
Thành phần Mô tả
Scheme Giao thức của máy chủ chạy dịch vụ
Machine name Tên miền của máy chủ dịch vụ
Port Đây là thành phần không bắt buộc, xác định cổng giao tiếp
trên máy chủ. Giao thức HTTP mặc định là cổng 80
Path Đường dẫn tới dịch vụ
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:
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
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
28
Đị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:
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ỉ.
Bảng các định dạng địa chỉ
Địa chỉ Đặc điểm Ví dụ
HTTP Là định dạng địa chỉ hay
dùng nhất
HTTPS Địa chỉ HTTPS giống như địa
chỉ HTTP chỉ khác là nó quy
định việc vận chuyển được
https://localhost/Service/HelloWorld
29
bả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à
https, thì địa chỉ HTTPS
không khác gì với địa chỉ
HTTP.
TCP net.tcp://localhost/Service/HelloWorld
MSMQ net.msmq://localhost/Service/HelloWorl
d
PIPE net.pipe://localhost/Service/HelloWorld
IIS Địa chỉ IIS cũng giống như
địa chỉ MSMQ, hơi khác về
định dạng một chút so với các
định dạng khác. Địa chỉ IIS
đòi hỏi phải có tên thư mục
ảo cũng như tên tệp dịch vụ .
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:
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ử
dụng CustomBinding.
Bảng các binding được có sẵn
Kiểu Công nghệ Bảo mật Phiên Giao dịch
BasicHttpBinding Basic Profile 1.1
(none),
Transport,
Message
(none) (none)
WSHttpBinding WS
Transport,
(Message),
Mixed
(none),
Transport,
Reliable
(none), Yes
WSDualHttpBinding WS (Message) Reliable (none), Yes
WSFederationHttpBinding WS (Message) (none), Reliable (none), Yes
NetTcpBinding .NET (Transport), Message
Reliable,
(Transport) (none), Yes
NetNamedPipeBinding .NET (Transport) none, (Transport) (none), Yes
31
NetMsmqBinding .NET
Message,
(Transport),
Both
(none) (none), Yes
NetPeerTcpBinding Peer (Transport) (none) none
MsmqIntegrationBinding MSMQ (Transport) (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ợ
giao thức nào.
Bảng những binding có sẵn và giao thức hỗ trợ tương ứng
Kiểu HTTP HTTPS TCP MSMQ
BasicHttpBinding Có Có Không Không
WSHttpBinding Có Có Có Không
WSDualHttpBinding Có Có Không Không
32
WSFederationHttpBinding Có Có Không Không
NetTcpBinding Không Không Có Không
NetNamedPipeBinding Không Không Không Không
NetMsmqBinding Không Không Không Có
NetPeerTcpBinding Không Không Có Không
MsmqIntegrationBinding Không Không Không Có
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ử
dụng ở các phương thức của dịch vụ
Message Contract (Contract bản tin): Cung cấp khả năng để điều khiển
các đầu đề bản tin trong quá trình tạo ra các bản tin
Cũng giống như các thành phần khác trong WCF, các contract được định nghĩa sử
dụng các khái niệm mà ta đã quen thuộc. Các contract được định nghĩa sử dụng các
34
lớ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
{
}
35
Sau đó để đị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à OperationContract cho 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ụ:
[ServiceContract]
public interface IStaffInformation
{
[OperationContract]
bool HasPerson(int staffId);
[OperationContract]
string GetPersonName(int staffId);
}
Sau khi có được định nghĩa cho dịch vụ, ta có thể cài đặt một lớp cho giao diện trên,
trong đó định nghĩa các hàm (phương thức) thực hiện theo logic của dịch vụ.
public class StaffInformation : IStaffInformation
{
public bool HasPerson(int staffId)
{
// Làm việc gì đó ở đây, và trả về kết quả
}
public string GetPersonName(int staffId)
{
// Làm việc gì đó ở đây, và trả về kết quả
}
}
36
Trong 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:
[ServiceContract]
public class StaffInformation : IStaffInformation
{
[OperationContract]
public bool HasPerson(int staffId)
{
// Làm việc gì đó ở đây, và trả về kết quả
}
[OperationContract]
public string GetPersonName(int staffId)
{
// Làm việc gì đó ở đây, và trả về kết quả
}
}
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
Tên tham số Mô tả
37
CallbackContract 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:
[ServiceContract(ConfigurationName="DichVu")]
public class StaffInformation : IStaffInformation
{
....
}
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
38
Name Thiết lập/Trả về tên của thành phần 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 hoặc muốn giữ nguyên tên của
thành phần 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 trong WSDL. Giá trị mặc định cho tham
số này là
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:
[ServiceContract(SessionMode=SessionMode.Required)]
public class StaffInformation : IStaffInformation
{
....
}
Thuộc tính OperationContract
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 OperationContract mớ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:
39
Bảng tham số thuộc tính OperationContract
Tên tham số Mô tả
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
Name Quy định tên cuối cùng của phương thức sẽ có trong dịch
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
40
3. Cuối cùng gọi hàm Logout để đăng xuất
[ServiceContract]
public interface IStaffInformation
{
[OperationContract(IsInitiating=true, IsTerminating=false)]
void Login(string userName, string password);
[OperationContract]
bool HasPerson(int staffId);
[OperationContract]
string GetPersonName(int staffId);
[OperationContract(IsInitiating=false, IsTerminating=true)]
void Logout();
}
Nếu máy khách không thực hiện theo thứ tự trên thì dịch vụ sẽ báo lỗi và không
thực hiện.
Data Contracts
Một cách đơn giản thì một contract dữ liệu mô tả dữ liệu cần trao đổi. Trước khi
máy khách và dịch vụ thực hiện liên lạc thì chúng phải đồng ý với nhau về kiểu dữ
liệu trao đổi, đó là contract dữ liệu. Điều quan trọng là khi thực hiện liên lạc, máy
khách và dịch vụ hoàn toàn không cần phải chung nhau cùng các kiểu dữ liệu mà
chúng chỉ cần chung nhau các contract dữ liệu. Contract dữ liệu định nghĩa cách
serialized và deserialized cho từng tham số và kiểu trả về.
Quá trình serialization dữ liệu là quá trình chuyển một cấu trúc dữ liệu thành một
định dạng có thể dùng trong liên lạc hoặc gửi qua đường truyền. Ví dụ đọc dữ liệu
từ cơ sở dữ liệu sau đó chuyển nó thành một chuỗi các byte và gửi qua đường
truyền.
Quá trình deserialization là quá trình ngược lại với quá trình serialization. Quá trình
này nhận dữ liệu từ đường truyền và chuyển ngược thành cấu trúc dữ liệu.
Để định nghĩa contract dữ liệu, ta sử dụng thuộc tính DataContract và DataMember.
41
Thuộc tính DataContract
Bảng tham số thuộc tính DataContract
Tên tham số Mô tả
Name Quy định tên của DataContract. Mặc định là tên contract
định nghĩa trong .NET
Namespace Quy định namespace của DataContract.
Thuộc tính DataMember
Bảng tham số thuộc tính DataMember
Tên tham số Mô tả
Name Quy định tên của DataMember. Mặc định là tên contract
định nghĩa trong .NET
Namespace Quy định namespace của DataMember.
IsRequired Quy định xem DataMember có cần thiết phải có hay
không
Order Thiết lập hoặc trả ra thứ tự serialization và
deserialization của DataMember.
EmitDefaultValue Thiết lập hoặc trả ra giá trị xác định để sinh giá trị mặc
định là null hoặc 0 cho DataMember khi serialization.
Message Contracts
Các contract bản tin được định nghĩa bằng cách gắn thuộc tính MessageContract
vào các lớp. Sau đó cần phải xác định rõ cho từng bản tin các thuộc tính
MessageHeader và MessageBodyMember. Ví dụ sau biểu diễn một contract bản tin
đơn giản.
[MessageContract]
42
public class Person
{
[MessageHeader]
int StaffId;
[MessageBodyMember]
string FullName;
[MessageBodyMember]
int Age;
}
Thuộc tính MessageHeader: được gắn với các trường hoặc thuộc tính của một
kiểu. Những trường hay thuộc tính này sau đó sẽ được ánh xạ thành các đầu đề bản
tin SOAP.
Thuộc tính MessageBodyMember: được gắn với các trường hoặc thuộc tính của
một kiểu. Những trường hay thuộc tính này sau đó sẽ được ánh xạ thành phần nội
dung của bản tin SOAP.
Như vậy, điểm cuối (Endpoint) là một bộ ba: A - Address, B - Binding, C -
Contract. Các máy khách (client) gọi dịch vụ WCF thông qua các điểm cuối của
dịch vụ. Mọi chi tiết bên trong Service đều được bao che kín. Mỗi điểm cuối chỉ có
thể có một Address, một Binding và một Contract. Tuy nhiên, một dịch vụ thì lại có
thể có nhiều điểm cuối (Endpoint). Có 2 cách để định nghia điểm cuối:
- Định nghĩa điểm cuối bằng mã nguồn
- Định nghĩa điểm cuối bằng tập tin cấu hình.
Định nghĩa điểm cuối bằng mã nguồn:
Hai dòng đầu của đoạn mã nguồn bên dưới dùng để định nghĩa các địa chỉ mà dịch
vụ sẽ sử dụng. Dòng tiếp tạo ra một đối tượng ServiceHost để chứa dịch vụ.
Uri bpa = new Uri("net.pipe://localhost/NetNamedPipeBinding");
Uri tcpa = new Uri("net.tcp://localhost:8000/TcpBinding");
ServiceHost sh = new ServiceHost(typeof(ServiceClass), bpa, tcpa);
NetNamedPipeBinding pb = new NetNamedPipeBinding();
NetTcpBinding tcpb = new NetTcpBinding();
43
ServiceMetadataBehavior behave = new ServiceMetadataBehavior();
sh.Description.Behaviors.Add(behave);
sh.AddServiceEndpoint(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexTcpBinding(), "mex");
sh.AddServiceEndpoint(typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexNamedPipeBinding(), "mex");
sh.AddServiceEndpoint(typeof(IServiceClass), pb, bpa);
sh.AddServiceEndpoint(typeof(IServiceClass), tcpb, tcpa);
sh.Open();
Định nghĩa điểm cuối bằng tập tin cấu hình:
Sau đây là một ví dụ dùng tập tin cấu hình để định nghĩa điểm cuối.
<endpoint address ="tcpmex" binding="mexTcpBinding"
contract="IMetadataExchange" />
<endpoint address="mex" binding="mexHttpBinding"
contract="IMetadataExchange"/>
44
“Luôn luôn có nhiều cách để giải quyết một vấn đề” đó là triết lý mà Microsoft gắn
liền trong các công nghệ của mình. WCF cũng vậy, điều đó làm tăng tính linh động
cho các ứng dụng và có nhiều sự lựa chọn hơn cho các nhà phát triển phần mềm.
Với sự phổ biến của hệ điều hành Windows và các ứng dụng trên Windows thì WCF
sẽ là một giải pháp hữu ích về công nghệ cho các ứng dụng doanh nghiệp muốn triển
khai trên diện rộng với nhiều chi nhánh khác nhau. CRM là một trong các hệ thống
như vậy. Trong chương tiếp theo – Chương 2 sẽ giới thiệu về giải pháp CRM.
45
CHƯƠNG 2: GIỚI THIỆU GIẢI PHÁP CRM CHO DOANH NGHIỆP
2.1. CRM là gì?
Customer Relationship Management, viết tắt là CRM, là hệ Quản lý Quan hệ
Khách hàng. Trên thế giới hiện nay có khá nhiều định nghĩa khác nhau về CRM.
Sau đây là một số định nghĩa cơ bản:
Định nghĩa 1:
CRM là triết lý kinh doanh lấy khách hàng làm trung tâm, trong đó lấy cơ chế hợp
tác với khách hàng bao trùm toàn bộ quy trình hoạt động kinh doanh của doanh
nghiệp.
CRM được xác định là cả một hệ thống những quy trình hỗ trợ mối quan hệ khách
hàng trong suốt vòng đời kinh doanh, nhằm đạt được mục tiêu chính: tạo ra dòng
thu hút những khách hàng mới và phát triển những khách hàng sẵn có. Giải pháp
CRM bao gồm 4 yếu tố:
1. Cấu trúc tổ chức lấy khách hàng làm trung tâm.
2. Những quy trình kinh doanh.
3. Những quy luật về dịch vụ khách hàng.
4. Phần mềm hỗ trợ.
Những quy luật và nguyên tắc trong quá trình phục vụ khách hàng phải được thấm
nhuần trong toàn bộ doanh nghiệp: kinh doanh, tiếp thị, dịch vụ, hậu cần, sản phẩm,
tài chính và các phòng ban khác. Quản lý mối quan hệ có nghĩa là thu hút những
khách hàng mới, biến khách hàng trung lập thành khách hàng chung thuỷ, biến
những khách hàng tận tuỵ thành các đối tác kinh doanh. Chiến lược này thích hợp
với mọi loại thị trường, bắt đầu bằng việc thu hút những khách hàng mới, sau đó tạo
mối quan hệ với họ, củng cố niềm tin đối với họ. Kết quả là, chính những khách
hàng này sẽ tạo nên mạng lưới đại lý cho doanh nghiệp.
Định nghĩa 2:
CRM là một chiến lược kinh doanh được thiết kế để nâng cao lợi nhuận, doanh thu
và sự hài lòng của khách hàng. Nó bao gồm phần mềm, các dịch vụ và một phương
thức kinh doanh mới nhằm gia tăng lợi nhuận, doanh thu, đồng thời làm hài lòng
khách hàng hơn để giữ chân khách hàng lâu hơn.
46
Bằng cách trợ giúp các doanh nghiệp có quy mô khác nhau xác định được các
khách hàng thực sự, nhanh chóng có được khách hàng phù hợp và duy trì mối quan
hệ với họ lâu dài hơn.
CRM về cơ bản có liên quan đến việc tập trung tất cả dữ liệu khách hàng và tự động
hóa nhiều công việc buồn tẻ trong công tác tiếp thị, quản lý bán hàng, và dịch vụ
khách hàng để những người chuyên trách có thể sử dụng nhiều thời gian hơn vào
các công việc trợ giúp các khách hàng của họ thành công hơn và tốn ít thời gian
hơn.
Định nghĩa 3:
CRM là một chiến lược kinh doanh quy mô toàn công ty được thiết kế nhằm làm
giảm chi phí và tăng lợi nhuận bằng cách củng cố lòng trung thành của khách hàng.
CRM thực sự sẽ mang lại lợi ích từ tất cả các nguồn thông tin trong và ngoài doanh
nghiệp để đem đến cái nhìn toàn diện về từng khách hàng tại từng thời điểm cụ thể.
Điều này cho phép các nhân viên làm việc với khách hàng trong các lĩnh vực như
tiếp thị, bán hàng, và hỗ trợ khách hàng có thể đưa ra những quyết định nhanh
chóng về mọi thứ nhằm đạt được hiệu quả cao trong kinh doanh.
CRM là cả một chiến thuật được sử dụng để tìm hiểu nhiều hơn về nhu cầu và hành
vi của khách hàng nhằm phát triển sâu hơn mối quan hệ với họ. Hơn hết thảy,
những mối quan hệ khách hàng tốt chính là trung tâm của mọi thành công của doanh
nghiệp. Có rất nhiều yếu tố công nghệ hợp thành CRM, nhưng cho rằng CRM là
thuật ngữ căn bản thuộc về công nghệ là hoàn toàn sai lầm. Thực sự hiệu quả hơn
khi hiểu CRM là một quy trình đem lại cùng lúc rất nhiều thông tin về khách hàng,
hiệu quả của công tác tiếp thị, bán hàng, những phản hồi và những xu hướng của thị
trường.
Nếu những mối quan hệ khách hàng là trái tim của doanh nghiệp thành công, thì
CRM là van tim bơm máu nuôi dưỡng cuộc sống của doanh nghiệp. CRM giúp các
doanh nghiệp sử dụng hiệu quả nguồn nhân lực, các quy trình và hiểu thấu lợi ích
của công nghệ đối với việc gia tăng khách hàng. Điều này cho phép cải thiện dịch
vụ khách hàng, tổ chức tốt các quy trình tiếp thị và bán hàng, tăng hiệu quả chăm
sóc khách hàng, giảm tỉ lệ thất bại, giảm chi phí, và gia tăng doanh thu cho doanh
nghiệp.
47
2.2. Lịch sử học thuyết CRM
Kế tiếp ERP (Enterprise Resource Planning - Kế hoạch Tài nguyên Doanh nghiệp,
chiến lược kinh doanh được hứa hẹn sẽ tự động hỗ trợ doanh nghiệp), thuật ngữ
CRM đầu tiên ra đời vào giữa thập niên 90. Tại thời điểm đó nói tới CRM là nói tới
phần mềm dùng để giúp cho các doanh nghiệp quản lý những mối quan hệ khách
hàng của họ. Từ phần mềm Tự động Thúc đẩy Bán hàng SFA - phần mềm tập trung
vào quản lý liên hệ khách hàng cho tới những giải pháp quản lý kiến thức được tích
hợp đã tạo nên những nền tảng ban đầu của CRM.
Một vài năm trước đây đã chứng kiến sự mở rộng của thuật ngữ này nhằm hoàn
thiện một cách tiếp cận chiến lược hơn và theo sau đó là sự đầu tư hàng tỉ đô la trên
toàn thế giới vào các giải pháp và dịch vụ CRM.
CRM thành công luôn bắt đầu cùng với chiến lược kinh doanh, điều này mang lại sự
thay đổi trong doanh nghiệp và các quy trình hoạt động của doanh nghiệp được hỗ
trợ bởi công nghệ. CRM đã tạo ra một triết lý kinh doanh thực sự lấy khách hàng
làm trung tâm, triết lý này tác động tới mọi góc độ và từng thành viên trong doanh
nghiệp.
Tuy nhiên không thể đánh mất một thực tế: Quản lý quan hệ khách hàng chính là
"Con người là hàng đầu và công nghệ là thứ yếu". Đó chính là giá trị đích thực của
CRM: khai thác tiềm năng của con người để có được nhiều kinh nghiệm về khách
hàng hơn, sử dụng công nghệ phần mềm để hỗ trợ quá trình kinh doanh hiệu quả
hơn.
Hình 1 45: “Khách hàng là trung tâm của mọi hoạt động”
48
Mô hình kinh doanh khép kín này phân chia mối quan hệ giữa doanh nghiệp với
khách hàng là thành 5 giai đoạn chính quan hệ chặt chẽ với nhau bao gồm:
Phân loại Khách hàng
Phân tích Hiệu quả Bán hàng
Quản lý Hợp đồng
Quản lý Khách hàng
Dịch vụ Khách hàng
Trong giai đoạn Phân loại khách hàng, doanh nghiệp thu thập thông tin nguồn khách
hàng tiềm năng, phân loại những khách hàng này để đưa họ vào chiến dịch tiếp thị
phù hợp, tạo ra những cơ hội bán hàng.
Từ những cơ hội bán hàng được tạo ra đó, doanh nghiệp thực hiện giai đoạn Phân
tích Hiệu quả Bán hàng. Tại thời điểm này, doanh nghiệp phân tích các cơ hội bán
hàng của họ, những cơ hội bán hàng đang ở giai đoạn nào, tỉ lệ thành công là bao
nhiêu, các đối tác, đối thủ có liên quan đến các cơ hội bán hàng đó… Từ những
phân tích này, doanh nghiệp sẽ có thể quản lý được các tổ chức khách hàng và dự
báo được doanh số chính xác.
Sau khi phân tích và dự báo bán hàng, những cơ hội bán hàng chuyển thành hợp
đồng bán hàng. Lúc này, doanh nghiệp thực hiện Quản lý Hợp đồng. Một hợp đồng
thành công cần phải có sự nhất trí cao của hai bên, chính vì thế trong giai đoạn này
doanh nghiệp thực hiện quản lý những yêu cầu từ phía khách hàng để thưc hiện tốt
hợp đồng.
Khi hợp đồng được thực hiện tức là những tiềm năng lúc này đã thực sự trở thành
khách hàng của doanh nghiệp. Khi đó, doanh nghiệp thực hiện Quản lý Khách
hàng. Doanh nghiệp theo dõi những khách hàng để bất cứ vấn đề phát sinh nào
cũng có thể được giải quyết kịp thời.
Giai đoạn Dịch vụ khách hàng: doanh nghiệp cung cấp những dịch vụ tốt nhất đến
khách hàng. Chính điều này sẽ tạo nên nguồn khách hàng tiềm năng mới cho doanh
nghiệp, để doanh nghiệp có nguồn tiềm năng sẵn sàng, tiếp tục thực hiện giai đoạn
Phân loại Khách hàng, tạo nên một chu trình kinh doanh hiệu quả.
49
2.3. Các khái niệm liên quan trọng trong CRM
2.3.1. Tiềm năng
Tiềm năng là một triển vọng hay một cơ hội tiềm tàng - là đối tượng có thể trở thành
khách hàng của doanh nghiệp, cho dù khả năng là rất nhỏ. Khách hàng tiềm năng có
thể là người trong một hội nghị thể hiện sự quan tâm đến sản phẩm của doanh nghiệp,
hay một ai đó điền vào một khuôn mẫu trên website của doanh nghiệp,…
2.3.2. Tổ chức
Tổ chức là tất cả các khách hàng, đối tác và đối thủ của doanh nghiệp. Một tổ chức
bao gồm các thông tin khác nhau như tên tổ chức, địa chỉ, số điện thoại, các cơ hội
bán hàng, tình huống, hoạt động,… gắn với tổ chức đó.
2.3.3. Liên hệ
Liên hệ là tất cả các cá nhân liên quan đến tổ chức mà doanh nghiệp cần theo dõi,
ví dụ như trưởng phòng kinh doanh hay giám đốc của một công ty,... Một liên hệ bao
gồm các thông tin khác nhau như họ và tên, chức danh, địa chỉ, số điện thoại,...
2.3.4. Cơ hội
Cơ hội là những triển vọng bán hàng hay những thương vụ đang còn thương
lượng. Một cơ hội bao gồm các thông tin khác nhau như tên cơ hội, tổ chức, chiến
dịch, loại, số tiền, giai đoạn, tỉ lệ...
2.3.5. Chiến dịch
Chiến dịch là một chiến lược tiếp thị bán hàng mà doanh nghiệp lập kế hoạch,
quản lý và theo dõi. Đó có thể là chương trình thư tín trực tiếp, hội thảo, ấn bản
quảng cáo, gửi email, hay các loại hình tiếp thị khác.
2.3.6. Hợp đồng
Hợp đồng là sự thỏa thuận bằng văn bản giữa hai hay nhiều bên. Nhiều công
ty sử dụng hợp đồng để xác định các điều khoản kinh doanh với các công ty
khác. Một hợp đồng bao gồm các thông tin khác nhau như tên cơ hội, trích yếu, tổ
chức, diễn giải, tình trạng, ngày hiệu lực …
2.3.7. Tình huống
Tình huống là tất cả những câu hỏi, phản hồi, thắc mắc… của khách hàng đối với
doanh nghiệp. Từ đó, người quản lý biết được những thông
50
tin nào về sản phẩm chưa được phổ biến đầy đủ đến khách hàng và có
những giải pháp giải quyết tối ưu nhằm gia tăng sự hài lòng của khách hàng
đối với doanh nghiệp; nhân viên bán hàng có thể quản lý và theo dõi các
tình huống liên quan tới khách hàng đang giao dịch, tra cứu và giải quyết
các tình huống theo mức độ ưu tiên cần thiết theo từng đối tượng khách
hàng.
2.3.8. Sản phẩm
Sản phẩm là những mặt hàng của doanh nghiệp được bán trong các cơ hội bán
hàng. Doanh nghiệp có thể thêm mới sản phẩm và giá cả của sản phẩm đó vào từ
điển Sản phẩm để quản lý.
2.3.9. Đối tác
Đối tác là những tổ chức tương tác, hỗ trợ doanh nghiệp thúc đẩy các cơ hội, tiến
trình bán hàng trên cơ sở hai bên cùng có lợi. Rất nhiều hoạt động bán hàng được
dựa trên mối quan hệ đối tác và sự hợp tác với các công ty khác. Đối với mỗi cơ
hội hay tổ chức được tạo ra, danh sách các đối tác có liên quan cho phép bạn lưu
trữ thông tin về các đối tác và vai trò của họ trong cơ hội bán hàng hay tổ chức.
Một đối tác phải là một tổ chức đang tồn tại trong CRM.
2.3.10. Đối thủ
Đối thủ là một tổ chức có các sản phẩm cạnh tranh với doanh nghiệp. Bạn có thể
theo dõi các đối thủ trong một thương vụ bằng cách lập danh sách các đối thủ
trong cơ hội đó. Theo dõi đối thủ là việc ghi nhận các điểm mạnh, điểm yếu của
đối thủ để từ đó hoạch định được những chiến lược kinh doanh thích hợp.
2.4. Lợi ích của CRM
Đối với khách hàng: CRM góp phần thúc đẩy mối quan hệ lâu dài giữa khách
hàng và doanh nghiệp, giúp khách hàng được hiểu rõ hơn, được phục vụ chu
đáo hơn. Nhờ có CRM, khách hàng cảm thấy rất được quan tâm từ những
điều rất nhỏ như: Sở thích, nhu cầu, ngày kỷ niệm...
Đối với doanh nghiệp: CRM giúp doanh nghiệp lắng nghe khách hàng của
mình nhiều hơn, dễ dàng quản lý tình hình kinh doanh và phát triển của mình
ở quá khứ, hiện tại cũng như tương lai. Giúp doanh nghiệp quảng bá sản
phẩm, thương hiệu một cách nhanh chóng, dễ dàng và ít chi phí nhất. Đồng
51
thời CRM giúp doanh nghiệp quản lý tập trung nguồn tài nguyên của mình,
cũng như quản lý nhân viên một cách hiệu quả
Đối với nhà quản lý: CRM cung cấp cho nhà quản lý nhiều công cụ hỗ trợ
đắc lực, giúp nhà quản lý nhanh chóng thống kê, phân tích, đánh giá tình hình
kinh doanh của doanh nghiệp từ quá khứ, hiện tại và tương lại. Phát hiện
những khó khăn, rủi do tiềm ẩn của doanh nghiệp để có thể kịp thời đưa ra
những giải pháp thích hợp cho những vấn đề đó. Đồng thời, CRM con giúp
người quản lý đánh giá được tình hình và hiệu quả làm việc của từng nhân
viên cấp dưới.
Đối với nhân viên: CRM cho phép nhân viên quản lý một cách hiệu quả thời
gian và công việc của mình. Đồng thời, giúp nhân viên nắm rõ thông tin về
từng khách hàng của mình để đưa ra phương thức hỗ trợ nhanh chóng hợp lý,
tạo được uy tín đối với khách hàng , giữ chân khách hàng lâu hơn.
52
CHƯƠNG 3: SỬ DỤNG CÔNG NGHỆ WCF ĐỂ XÂY DỰNG HỆ THỐNG CRM
WCF 2010
3.1. Vấn đề đặt ra
Trước thực trạng khủng hoảng kinh tế toàn cầu hiện nay, các doanh nghiệp đang ra
sức tìm kiếm một hệ thống CRM thích hợp áp dụng cho mình để có thể nâng cao
năng lực cạnh tranh và tìm kiếm các khách hàng tiềm năng thì bản thân doanh
nghiệp lại thấy choáng ngợp trước các vấn đề khó khăn của ngành công nghệ phần
mềm: Đó là sự thiếu thống nhất về nền tảng, công nghệ, khả năng tích hợp kém, và
khó có thể đáp ứng được sự thay đổi của yêu cầu trong tương lai. Hơn nữa doanh
nghiệp lại không muốn phải bỏ đi toàn bộ những hệ thống mình hiện có. Vì thế kiến
trúc hướng dịch vụ ra đời nhằm giải quyết các khó khăn này và WCF là một công
nghệ giúp xây dựng các dịch vụ theo đúng các nguyên tắc và đặc điểm của SOA
(Kiến trúc hướng dịch vụ), đó là:
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 mô-dun (hay “hộp đen”)
Tính linh động.
Có khả năng tái sử dụng.
Tính trong suốt.
Kiến trúc mở làm cho việc mở rộng dễ dàng.
Dễ hiểu – dễ dàng liên kết giao dịch.
Trên thế giới hiện có rất nhiều phần mềm CRM viết trên nền tảng Web-Form do các
hãng phần mềm lớn như Sales Force, Oracle, Microsoft… xây dựng, các phần mềm
này thướng có giá rất cao, vì vậy các doanh nghiệp Việt Nam chưa đủ kinh phí để
triển khai. Còn đối với các phần mềm trong nước thì chủ yếu là viết trên nền tảng
Win Form có lợi thế về giá thành rẻ phù hợp với các doanh nghiệp vừa và nhỏ. Tuy
nhiên, cũng giống như các phần mềm khác viết trên nền tảng này, phần mềm CRM
trong nước cũng gặp khó khăn trong vần đề tập trung dữ liệu đối với các doanh
nghiệp có nhiều chi nhánh cách xa nhau về mặt địa lý nên việc tổng hợp dữ liệu
thường phải thông qua giải pháp xuất khẩu dữ liệu thành các file và gửi về trung
tâm. Điều này gây khó khăn trong quá trình tổng hợp dữ liệu do việc nhập liệu ở các
chi nhánh là không thống nhất.
53
Hình 1 46: Quy trình chung của hệ thống CRM
Hơn nữa khi doanh nghiệp có nhu cầu mở rộng phạm vi hoạt động thì các phần mềm
này lại không thể đáp ứng được. Dữ liệu không tập trung, thiếu đồng bộ đẫn đến khó
khăn trong tích hợp. Dịch vụ Web là một hướng đi đúng đắn để giải quyết vấn đề
này. Tuy nhiên dịch vụ Web lại khó triển khai trong cả mạng LAN và Internet. Đồng
thời, đối với các ứng dụng trong doanh nghiệp thì lượng dữ liệu phải nhập là rất lớn
và đòi hỏi có thể nhập nhanh, linh động vì vậy ứng dụng desktop vẫn là thích hợp
nhất. Người dùng thì vốn đã rất quen thuộc với ứng dụng desktop và nếu phát triển
các ứng dụng theo hướng desktop thì có thể tận dụng kế thừa từ các dự án đã có.
WCF là một công nghệ thích hợp cho việc xây dựng các hệ thống như vậy. WCF có
thể thay thế cho các công nghệ hiện tại bởi nó có khả năng mở, tính thống nhất cao,
và hỗ trợ rất nhiều chuẩn, giao thức hiện có. Hệ thống CRM – Quản lý quan hệ
khách hàng luôn lấy khách hàng làm trung tâm. Chính vì thế việc lưu trữ, thu thập
thông tin về khách hàng một cách tập trung, cùng việc cung cấp thông tin về sản
phẩm, dịch vụ, chương trình khuyến mại… là vô cùng quan trọng. Doanh nghiệp
cần phải quản lý được các thông tin này để tránh khi một nhân viên nghỉ việc thì
toàn bộ các thông tin về khách hàng của nhân viên đó cũng biến. Dữ liệu tập trung
cũng giúp người quản lý dễ dàng theo dõi hoạt động của các chi nhánh hay từng
nhân viên trong doanh nghiệp và xem các báo cáo, thống kê theo nhiều tiêu chí qua
đó có thể nhanh chóng đưa ra các quyết định chính xác. CRM WCF 2010 là một
phần mềm như vậy.
54
3.2. Tổng quan về CRM WCF 2010
CRM WCF 2010 được phát triển dựa trên nền tảng lý thuyết của hệ thống Sales
Force Automation, viết tắt là SFA, là hệ thống Thúc đẩy Bán hàng.
SFA là một kỹ thuật trong việc sử dụng phần mềm để tự động hoá những nhiệm vụ
bán hàng của doanh nghiệp, bao gồm quy trình đặt hàng, quản lý quan hệ với khách
hàng, chia sẻ thông tin, kiểm tra và quản lý hàng trong kho, theo dõi đơn hàng, quản
lý khách hàng, phân tích dự báo bán hàng và đánh giá hoạt động của nhân viên.
SFA có thể giúp người bán hàng quản lý tương tác với khách hàng xuyên suốt chu
trình bán hàng từ những liên hệ ban đầu đến các dịch vụ sau bán hàng. Các ứng
dụng của SFA phục vụ hai đối tượng người dùng khác nhau trong cùng một công ty,
bao gồm nhà quản lý và các nhân viên bán hàng. Tự động Thúc đẩy Bán hàng SFA
là tất yếu trong những ngành công nghiệp có xu hướng thúc đẩy bán hàng trực tiếp
và quản lý tổ chức là điều quan trọng. Các công ty dược và các ngành công nghiệp
sản xuất đã có được những đền đáp xứng đáng từ những đầu tư cho SFA.
Sau sự phát triển của SFA, sự ra đời của hệ Quản trị Quan hệ Khách hàng - CRM
cũng đã đem lại những lợi ích to lớn cho các doanh nghiệp. CRM là chiến lược kinh
doanh nhằm đạt được sự thấu hiểu toàn diện, đoán trước, quản lý và cá nhân hoá
những nhu cầu của khách hàng hiện tại và khách hàng tiềm năng của doanh nghiệp.
CRM WCF 2010 sẽ giúp các doanh nghiệp nâng cao mức độ hài lòng của khách
hàng, duy trì được mối quan hệ với khách hàng lâu hơn và thu được lợi nhuận nhiều
hơn.
55
CRM WCF 2010 cho phép người sử dụng quản lý, theo dõi các thông tin về:
Tổ chức: thông tin về các công ty cụ thể
Liên hệ: thông tin về các cá nhân gắn với các tổ chức
Cơ hội: những thương vụ bán hàng cần theo dõi
Chiến dịch: thông tin về các chương trình tiếp thị
Hợp đồng: thỏa thuận bằng văn bản với khách hàng
Tình huống: thông tin về phản hồi, thắc mắc của khách hàng và giải pháp
cho những vấn đề đó
Hoạt động: tất cả các nhiệm vụ và lịch hẹn do người sử dụng đặt ra nhằm
quản lý, theo dõi thời gian và công việc của mình
Sản phẩm: những mặt hàng doanh nghiệp cung cấp, đơn giá, diễn giải cho
những mặt hàng đó
Tài liệu: nơi lưu trữ thông tin dùng chung cho cả doanh nghiệp
Báo cáo: là những phân tích về dữ liệu của từng nhân viên, từng nhóm hay
của toàn thể công ty
Bàn làm việc: những biểu đồ/ đồ thị tổng hợp dữ liệu báo cáo hoạt động
kinh doanh và những nhắc nhở về lịch hẹn/ nhiệm vụ cần thực hiện của cá
nhân
56
3.3. Quy trình tác nghiệp của CRM WCF 2010
3.3.1. Quy trình tiếp thị
Hình 1 47: Quy trình tiếp thị
Mô tả quy trình:
Nhà quản lý chiến dịch gửi thư và tin nhắn SMS hàng loạt đến các khách
hàng tiềm năng. Khi đó hàng ngàn, hàng vạn khách hàng tiềm năng sẽ nhanh
chóng nhận được thông tin về sản phẩm mới, tính năng mới của các sản phẩm
của doanh nghiệp, các chương trình khuyến mãi...
Nhân viên bán hàng từ chiến dịch tiếp thị, sẽ lưu giữ các khách hàng tiềm
năng, giao tiếp với tiềm năng . Từ đó đánh giá chất lượng tiềm năng như rất
quan tâm đến sản phẩm của chiến dịch, ít quan tâm, không quan tâm. Nếu
không quan tâm thì sẽ ngừng theo dõi, còn quan tâm sẽ chuyển đổi tiềm năng
thành cơ hội.
57
3.3.2. Quy trình Bán hàng
Hình 1 48: Quy trình bán hàng
Mô tả quy trình:
Sau chiến dịch, nhà quản lý chiến dịch sẽ lọc được những khách hàng tiềm
năng quan tâm đến sản phẩm của công ty. Từ những khách hàng tiềm năng sẽ
lấy được người liên hệ của tổ chức để liên hệ thương thảo đi đến ký kết hợp
đồng.
Nhân viên bán hàng chuyển đổi những tiềm năng thành cơ hội bán hàng. Nếu
cơ hội bán hàng thắng sẽ đi đến ký kết hợp đồng. Nếu thất bái, cơ hội kết
thúc.
58
3.3.3. Quy trình dịch vụ sau bán hàng
Hình 1 49: Quy trình dịch vụ sau bán hàng
Mô tả quy trình:
Nhân viên bán hàng tiếp nhân các phản hồi, câu hỏi, thắc mắc của khách
hàng về sản phẩm của công ty, về các chương trình khuyến mãi, các dịch
vụ...
Nhân viên bán hàng nếu giải đáp được ngay sẽ giải đáp cho khách hàng, nếu
không sẽ trình nên cấp trên để giải quyết và giải đáp cho khách hàng ngay khi
có thể.
59
3.4. Các use case chính của hệ thống CRM WCF 2010
3.4.1. Quản lý tổ chức
Hình 1 50: Sơ đồ use case quản lý tổ chức
Mục đích của use case
Usecase này cho phép lập tổ chức để quản lý tổ chức, quản lý các hợp đồng, các cơ
hội, người liên hệ của tổ chức đó. Các đối tượng tham gia vào bao gồm nhân viên
bán hàng, người quản lý. Nhân viên thừa kế các hàng động của người quản lý.
Mô tả sơ lược use case
Thêm tổ chức: Cho phép tạo một tổ chức mới.
- Tác nhân: Nhân viên, người quản lý.
Xóa tổ chức: Xóa một tổ chức nào đó không còn hợp tác hay ngừng theo dõi tổ
chức đó.
- Tác nhân: Nhân viên, người quản lý.
In danh sách tổ chức: Cho phép xem danh sách các tổ chức.
- Tác nhân: Người quản lý, nhân viên.
Sửa tổ chức: Cho phép người dùng sửa các thông tin về tổ chức.
- Tác nhân: Người quản lý, nhân viên.
Thêm cơ hội của tổ chức: Cho phép người dùng thêm cơ hội với tổ chức được chọn.
60
- Tác nhân: Người quản lý, nhân viên.
Thêm liên hệ cho tổ chức: Cho phép người dùng thêm liên hệ cho tổ chức được
chọn.
- Tác nhân: Người quản lý, nhân viên.
Thêm hợp đồng cho tổ chức: Cho phép người dùng thêm hợp đồng cho tổ chức
được chọn.
- Tác nhân: Người quản lý, nhân viên.
3.4.2. Quản lý cơ hội
Hình 1 51: Sơ đồ use case quản lý cơ hội
Mục đích của usecase
Cho phép người dùng tạo và quản lý các cơ hội bán hàng, có thể tạo và quản lý các
sản phẩm, đối tác, đối thủ, liên hệ của cơ hội bán hàng. Nhân viên thừa kế các hành
động của người quản lý.
Mô tả sơ lược usecase
Thêm mới cơ hội: Cho phép người dùng thêm mới một cơ hội bán hàng.
- Tác nhân: Người quản lý, nhân viên.
Sửa cơ hội: Cho phép người dùng sửa các thông tin về cơ hội được chọn.
- Tác nhân: Người quản lý, nhân viên.
61
Xóa cơ hội: Cho phép xóa một hoặc nhiều cơ hội không còn được theo dõi.
- Tác nhân: Người quản lý, nhân viên.
In danh sách các cơ hội: Cho phép in danh sách các cơ hội đang theo dõi.
- Tác nhân: Người quản lý, nhân viên.
Thêm sản phẩm: Cho phép thêm sản phẩm trong cơ hội bán hàng được chọn.
- Tác nhân: Người quản lý, nhân viên.
Thêm liên hệ: Cho phép thêm liên hệ trong cơ hội bán hàng.
- Tác nhân: Người quản lý, nhân viên.
Thêm đối thủ: Cho thêm đối thủ có cùng sản phẩm cạnh tranh với công ty.
- Tác nhân: Người quản lý, nhân viên.
Thêm đối tác: Cho phép thêm các đối tác hợp tác với công ty trong cơ hội bán hàng.
- Tác nhân: Người quản lý, nhân viên.
3.4.3. Quản lý hợp đồng
Hình 1 52: Sơ đồ use case quản lý hợp đồng
Mục đích của usecase
Cho phép người dùng có thể xem, tạo và sửa các hợp đồng của công ty. Người dùng
cũng có thể thêm các sản phẩm trong hợp đồng được chọn.
62
Mô tả sơ lược use case
Thêm mới hợp đồng: Cho phép thêm mới một hợp đồng với khách hàng, đối tác.
- Tác nhân: Người quản lý, nhân viên.
Sửa hợp đồng: Cho phép sửa các thông tin về hợp đồng cũng như các sản phẩm
trong hợp đồng.
- Tác nhân: Người quản lý, nhân viên.
Xóa hợp đồng: Cho phép người dùng xóa những hợp đồng bị hủy.
- Tác nhân: Người quản lý, nhân viên.
In danh sách hợp đồng: Cho phép người dùng xem báo cáo danh sách các hợp đồng.
- Tác nhân: Người quản lý, nhân viên.
Thêm sản phẩm: Cho phép thêm cũng như chỉnh sửa các sản phẩm trong hợp đồng.
- Tác nhân: Người quản lý, nhân viên.
Thêm ghi chú và đính kèm: Cho phep thêm các ghi chú, đính kèm về hợp đồng.
- Tác nhân: Người quản lý, nhân viên.
3.4.4. Quản lý tiềm năng
Hình 1 53: Sơ đồ use case quản lý tiềm năng
63
Mục đích của usecase
Cho phép người dùng thêm, sửa, xóa, in danh sách các khách hàng tiềm năng của
công ty.
Mô tả sơ lược usecase
Thêm mới tiềm năng: Cho phép người dùng thêm mới một khách hàng tiềm năng.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
Xóa tiềm năng: Cho phép người dùng xóa một hoặc nhiều tiềm năng.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
Sửa tiềm năng: Cho phép người dùng sửa các thông tin về tiềm năng.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
In danh sách tiềm năng: Cho phép in danh sách các tiềm năng đang theo dõi.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
Thêm ghi chú & đính kèm:Cho phép thêm các ghi chú, đính kèm về tiềm năng.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
64
3.4.5. Quản lý chiến dịch
Hình 1 54: Sơ đồ use case quản lý chiến dịch
Mục đích của usecase
Cho phép người dùng theo dõi, quản lý các chiến dịch từ khi được tạo ra đến khi kết
thúc. Người dùng cũng có thể quản lý các cơ hội bán hàng của chiến dịch đó.
Mô tả sơ lược usecase
Thêm mới chiến dịch: Cho phép người dùng thêm mới một chiến dịch.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
Xóa chiến dịch: Cho phep người dùng xóa một hoặc nhiều chiến dịch.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
Sửa chiến dịch: Cho phep sửa thông tin về một chiến dịch nào đó cũng như các cơ
hội của chiến dịch đó.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
In danh sách chiến dịch: Cho phép in danh sách các chiến dịch đang theo dõi.
Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
65
Thêm cơ hội: Cho phép người dùng thêm cơ hội cho chiến dịch.
- Tác nhân: nhân viên, người quản lý. Nhân viên kế thừa các tính chất và hành vi của
người quản lý.
3.4.6. Quản lý báo cáo
Hình 1 55: Sơ đồ use case quản lý báo cáo
Mục đích usecase
Cho phép người quản lý xem cáo báo cáo về sản phẩm, hợp đồng, chiến dịch...
Tác nhân: Người quản lý
Mô tả sơ lược usecase
Báo cáo tiềm năng: Cho phép người quản lý xem các báo về tiềm năng như đối
tượng tiềm năng theo lĩnh vực, theo nguồn...
Báo cáo chiến dịch: Cho phép người dùng xem các báo cáo về chiến dịch như người
liên hệ của chiến dịch, tiềm năng của chiến dịch, báo cáo doanh thu của chiến dịch.
Báo cáo nhân viên: Cho phép người dùng xem các báo cáo về nhân viên như tổ
chức theo nhân viên, hợp đồng theo nhân viên,...
Báo cáo hợp đồng:Cho phép người dùng xem các báo cáo về các hợp đồng như tình
hình thực hiện hợp đồng, doanh thu theo hợp đồng...
Báo cáo tổ chức và liên hệ:Cho phép người dùng xem các báo cáo về các tổ chức và
liên hệ như báo cáo về đối tác, khách hàng cần quan tâm...
66
3.5. Biểu đồ tuần tự của hệ thống
3.5.1. Thêm, sửa tổ chức
Hình 1 56: Biểu đồ tuần tự thêm ,sửa tổ chức
3.5.2. Xóa tổ chức
Hình 1 57: Biểu đồ tuần tự xóa tổ chức
Yêu cầu thêm(sửa) TC Gọi Form chi tiết TC
Yêu cầu nhập thông tin
Nhập thông tin
Kiểm tra hợp lệ
Lưu dữ liệu Xử lý
Hiển thị thông
báo, nếu có lỗi
Chọn tổ chức cần xóa
Yêu cầu xóa
Đưa ra cảnh
Người dùng chọn “Yes”
Xử lý
Thông báo nếu có lỗi
Thông báo
67
3.5.3. Thêm, sửa tiềm năng
Hình 1 58: Biểu đồ tuần tự thêm, sửa tiềm năng
3.5.4. Xóa tiềm năng
Hình 1 59: Biểu đồ tuần tự xóa tiềm năng
Yêu cầu thêm (sửa)
Gọi Form chi
tiết tiềm năng
Yêu cầu nhập thông tin
Nhập thông tin
Kiểm tra hợp
lệ
Lưu dữ liệu
Xử lý
Thông báo lỗi nếu có
Thông báo
Chọn tiềm năng cần xóa
Xóa tiềm năng
Đưa ra cảnh báo
Người dùng đồng ý
Xử lý
Đưa ra thông báo nếu có lỗi
68
3.5.5. Thêm, sửa cơ hội
Hình 1 60: Biểu đồ tuần tự thêm, sửa cơ hội
3.5.6. Xóa cơ hội
Hình 1 61: Biểu đồ tuần tự xóa cơ hội
Yêu cầu thêm(Sửa)
Gọi Form chi tiết cơ
hội
Yêu cầu nhập thông tin
Nhập thông tin
Kiểm tra hợp lệ
Lưu dữ liệu
Xử lý
Thông báo lỗi nếu có
Thông báo
Chọn cơ hội cần xóa
Xóa cơ hội
Đưa ra cảnh báo
Người dùng đồng ý xóa
Xử lý
Thông báo lỗi nếu có
69
3.5.7. Thêm, sửa hợp đồng
Hình 1 62: Biểu đồ tuần tự thêm, sửa hợp đồng
3.5.8. Xóa hợp đồng
Hình 1 63: Biểu đồ tuần tự xóa hợp đồng
Yêu cầu thêm (sửa)
Gọi Form chi tiết hợp
đồng
Yêu cầu nhập thông tin
Nhập thông tin
Kiểm tra hợp
lệ
Lưu dữ liệu
Xử lý
Thông báo lỗi nếu có
Thông báo
Chọn hợp đồng cần xóa
Xóa hợp đồng đã chọn
Đưa ra cảnh
báo
Người dùng đồng ý xóa
Xử lý
Thông báo lỗi nếu có
70
3.5.9. Thêm, sửa liên hệ
Hình 1 64: Biểu đồ tuần tự thêm, sửa liên hệ
3.5.10. Xóa liên hệ
Hình 1 65: Biểu đồ tuần tự xóa liên hệ
Yêu cầu thêm(sửa)
Gọi Form chi tiết LH
Yêu cầu nhập thông tin
Nhập thông tin
Kiểm tra hợp lệ
Lưu dữ liệu
Thông báo lỗi nếu có
Xử lý
Thông báo
Chọn liên hệ cần xóa
Xóa liên hệ đã chọn
Đưa ra cảnh báo
Người dùng đồng ý Xử lý
Thông báo nếu có lỗi
71
3.5.11. Thêm, sửa chiến dịch
Hình 1 66: Biểu đồ tuần tự thêm, sửa chiến dịch
3.5.12. Xóa chiến dịch
Hình 1 67: Biểu đồ tuần tự xóa chiến dịch
Yêu cầu thêm(sửa)
Gọi Form chi tiết CD
Kiểm tra hợp lệ
Yêu cầu nhập thông tin
Nhập thông tin
Lưu dữ liệu
Xử lý
Thông báo nếu có lỗi
Thông báo
Chọn chiến dịch cần xóa
Xóa chiến dịch đã chọn
Đưa ra cảnh báo
Người dùng đồng ý xóa Xử lý
Thông báo nếu có lỗi
72
3.5. Kiến trúc và công cụ phát triển CRM WCF 2010
3.5.1. Kiến trúc của CRM WCF 2010
CRM WCF 2010 được thiết kế theo mô hình 3 lớp:
Tầng Giao diện người dùng (UI): Là giao diện ứng dụng mà người dùng nhìn
thấy và có thể tương tác.
Tầng xử lý nghiệp vụ (BC): Là tầng mà tại đó mọi tác vụ, tiến trình xử lý
nghiệp vụ xảy ra rồi trả kết quả về để hiện thị lên UI.
Tầng truy cập dữ liệu (DAC): Là tầng thao tác trực tiếp với cơ sở dữ liệu, lấy
dữ liệu và cập nhật dữ liệu đến cớ sở dữ liệu.
Trong đó tầng BC, DAC nằm trên Server và ở BC đưa ra bên ngoài các Service
Interface sử dụng công nghệ WCF. Trên server BC gọi tầng DAC để lấy dữ liệu cho
việc xử lý các yêu cầu nghiệp vụ.
Tầng UI thì đặt ở phía Client và gọi đến server qua các Service Interface.
Hình 1 68: Kiến trúc CRM WCF 2010
Nhờ kiến trúc này mà hệ thống CRM WCF 2010 có thể đáp ứng được nhu cầu của
các công ty đa chi nhánh. Với việc lưu trữ dữ liệu tập trung thì doanh nghiệp hoàn
toàn có thể yên tâm về vấn đề bảo mật của dữ liệu, và khả năng tổng hợp dữ liệu
nhanh chóng. Tái sử dụng và dễ thay đổi cũng là một ưu điểm của kiến trúc này.
CRM WCF 2010 hoàn toàn có khả năng đáp ứng những yêu cầu mới của khách
hàng.
73
3.5.2. Môi trường phát triển CRM WCF 2010
Ngôn ngữ lập trình:
- Ngôn ngữ Visual Basic.NET và nền tảng .NET 3.5.
Công cụ phát triển:
- Bộ công cụ phát triển Visual Studio 2008 và của Microsoft.
- Công cụ quản lý mã nguồn SourceOffSide.
- Bộ control giao diện người dùng Infragistics 9.1.
Cơ sở dữ liệu:
- CRM WCF 2010 sử dụng hệ quản trị cơ sở dữ liệu Microsoft SQL Server
để xây dựng cơ sở dữ liệu.
Như đã trình bày, hệ thống CRM WCF 2010 có rất nhiều phân hệ, không thể đề cập
hết trong khuôn khổ một bản khóa luận tốt nghiệp. Sau đây tôi xin giới thiệu về 3 phân hệ
đang được triển khai là các phân hệ:Cơ hội, Tổ chức và Liên hệ.
3.6. Giao diện minh họa các phân hệ chính của CRM WCF 2010
3.6.1. Phân hệ Tổ chức
Hình 1 69: Giao diện phân hệ Tổ chức
74
Vai trò của phân hệ Tổ chức trong CRM WCF 2010
Phân hệ Tổ chức cho phép người sử dụng theo dõi, phân tích, thống kê tất cả các
giao dịch của mỗi cá nhân bán hàng với các tổ chức có liên quan đến các cơ hội.
Đồng thời, người sử dụng có thể biết trong một khoảng thời gian tuỳ chọn họ đã
giao dịch với những tổ chức nào, đâu là tổ chức họ cần quan tâm, những tổ chức
nào là tổ chức đối tác… từ đó có thể đưa ra được quyết định chiến lược, thúc đẩy
hoạt động kinh doanh của doanh nghiệp.
Các từ điển liên quan
1. Doanh thu năm: Từ điển Doanh thu năm là một chỉ tiêu dùng để phân loại tổ
chức theo mức doanh thu mà các tổ chức đó đạt được trong một năm.
2. Số lượng nhân viên: Từ điển Số lượng nhân viên là một chỉ tiêu dùng để phân
loại tổ chức theo khoảng số lượng nhân viên làm việc trong tổ chức đó.
3. Loại tổ chức: Từ điển Loại tổ chức là một chỉ tiêu dùng để phân loại tổ chức
theo các nhóm đối tượng quan hệ của doanh nghiệp, ví dụ như Đối tác, Đối thủ,
Khách hàng,...
4. Loại hình sở hữu: Từ điển Loại sở hữu là một chỉ tiêu dùng để phân loại tổ
chức theo loại hình sở hữu của tổ chức đó, ví dụ như Sở hữu nhà nước, Sở hữu
tư nhân,…
5. Phân loại tổ chức: Từ điển Phân loại Tổ chức là một chỉ tiêu do doanh
nghiệp tự đặt ra nhằm phân nhóm các tổ chức cần theo dõi để thuận tiện trong
việc tìm kiếm và quản lý
6. Vai trò đối tác: Từ điển Vai trò Đối tác là một chỉ tiêu dùng để phân loại các
tổ chức đối tác theo vai trò của đối tác đó đối với doanh nghiệp, ví dụ như Nhà
cung cấp, Nhà tư vấn, Môi giới,…
7. Lĩnh vực: Từ điển Lĩnh vực là một chỉ tiêu dùng để phân loại tổ chức theo
lĩnh vực hoạt động kinh doanh của tổ chức đó, ví dụ như Điện tử, Viễn thông,
Ngân hàng, Bảo hiểm,…
75
3.6.2. Phân hệ liên hệ
Hình 1 70: Giao diện phân hệ Liên hệ
Vai trò của phân hệ Liên hệ trong CRM WCF 2010
Phân hệ Liên hệ cho phép người sử dụng theo dõi, tổng hợp thông tin về người liên
hệ và vai trò của họ trong các tổ chức và các cơ hội bán hàng. Bằng những thông tin
đó, người bán hàng sẽ định hướng được cách tiếp cận hiệu quả hơn nhằm đạt được
nhiều doanh thu hơn từ những tổ chức của người liên hệ đó.
Các từ điển liên quan
1. Phân loại Liên hệ: Từ điển Phân loại Liên hệ là một chỉ tiêu do doanh
nghiệp tự đặt ra nhằm phân nhóm các liên hệ theo tiêu chí riêng của mình để
thuận tiện trong việc tìm kiếm và quản lý.
2. Vai trò Liên hệ: Từ điển Vai trò Liên hệ là một chỉ tiêu dùng để xác định vai
trò của một liên hệ trong một cơ hội bán hàng cụ thể.
76
3. Nguồn gốc liên hệ: Từ điển Nguồn gốc là một chỉ tiêu dùng để phân loại kênh
thông tin mà qua đó người liên hệ biết đến doanh nghiệp và sản phẩm của doanh
nghiệp.
3.6.3. Phân hệ cơ hội
Hình 1 36: Giao diện phân hệ Cơ hội
Vai trò của phân hệ Cơ hội trong CRM WCF 2010
Phân hệ Cơ hội cho phép theo dõi, thống kê, phân tích, tổng hợp các giao dịch hàng
ngày của nhân viên bán hàng, có bao nhiêu cơ hội đang ở giai đoạn nào, bao nhiêu
cơ hội thành công, bao nhiêu cơ hội đang đi vào ngõ cụt, bao nhiêu cơ hội thất bại,
doanh số của các cơ hội, tổng số các cơ hội theo từng sản phẩm trong tháng… Từ
đó, nhân viên bán hàng có thể quản lý chặt chẽ từng cơ hội bán hàng xác định những
cách tiếp cận khách hàng một cách hiệu quả nhất, người quản lý có thể phân tích, dự
đoán được tình hình kinh doanh của doanh nghiệp trong thời gian kế tiếp, kịp thời
thay đổi, áp dụng những chiến lược kinh doanh phù hợp nhằm đạt được lợi nhuận tối
đa.
77
Các từ điển liên quan
1. Giai đoạn: Từ điển Giai đoạn là một chỉ tiêu dùng để phân loại cơ hội theo
từng giai đoạn của chu kỳ bán hàng.
2. Phân loại cơ hội: Từ điển Phân loại Cơ hội là một chỉ tiêu do doanh nghiệp
tự đặt ra nhằm phân nhóm các cơ hội bán hàng của mình theo tiêu chí riêng để
thuận tiện trong việc tìm kiếm và quản lý.
3. Bước tiếp theo: Từ điển Bước tiếp theo Cơ hội là một chỉ tiêu dùng để xác
định công việc tiếp theo cần thực hiện để thúc đẩy cơ hội bán hàng đi đến thành
công.
4. Lý do thắng/thua: Từ điển Lý do thắng/thua là một chỉ tiêu dùng để phân loại
cơ hội theo nguyên nhân vì sao cơ hội thắng lợi hay thất bại.
5. Vai trò liên hệ: Từ điển Vai trò Liên hệ là một chỉ tiêu dùng để xác định một
liên hệ có vai trò như thế nào trong một cơ hội bán hàng.
6. Vai trò đối tác: Từ điển Vai trò Đối tác là một chỉ tiêu để xác định một tổ chức
đối tác có vai trò như thế nào trong một cơ hội bán hàng.
7. Loại: Từ điển Loại là một chỉ tiêu dùng để phân loại tổ chức có liên quan đến
cơ hội bán hàng là khách hàng mới hay cũ.
8. Nguồn gốc: Từ điển Nguồn gốc là một chỉ tiêu dùng để phân loại kênh thông
tin mà qua đó khách hàng biết đến doanh nghiệp và sản phẩm của doanh nghiệp.
78
KẾT LUẬN
Quản trị quan hệ khách hàng - CRM ngày càng trở lên quan trọng đối với cáo doanh
nghiệp, giúp cho doanh nghiệp quản lý khách hàng tốt hơn, tạo mối quan hệ lâu bền với
khách hàng và tìm kiếm những khách hàng tiềm năng mới.
Bản khóa luận tốt nghiệp này đã nói lên những khái niệm cơ bản nhất về công nghệ WCF
và xây dựng các chức năng chính của một hệ thống CRM.
Do thời gian thực hiện đề tài có hạn và phạm vi rộng lớn của vấn đề , khóa luận chưa thể
đi sâu và đề cập hết mọi khía cạnh của công nghệ WCF cùng việc xây dựng các ứng dụng
trên diện rộng dựa trên công nghệ này.
Em xin chân thành cảm ơn thầy giáo ThS. Đào Kiến Quốc và ThS. Nguyễn Xuân Hoàng
Phó TGĐ Công ty cổ phần MISA đã trực tiếp hướng dẫn, động viên, giúp đỡ em rất nhiều
để em có thể hoàn thành bản khóa luận tốt nghiệp này.
Cuối cùng em xin bày tỏ lòng biết ơn sâu sắc đến gia đình, bạn bè, thầy cô giáo những
người đã quan tâm, giúp đỡ em rất nhiều trong những năm ngồi trên ghế nhà trường.
79
TÀI LIỆU THAM KHẢO
[1]. Dave Grundgeiger (2002), Programming Visual Basic. Net, O’Reilly [2]. John
Sharp. Microsoft Windows Communication Foundation Step by Step.
Các file đính kèm theo tài liệu này:
- LUẬN VĂN-SỬ DỤNG CÔNG NGHỆ WINDOWS COMMUNICATION FOUNDATION TRONG CÁC ỨNG DỤNG TRÊN DIỆN RỘNG.pdf