Giới Thiệu Về Dịch Vụ WCF
- 09-07-2024
- Toanngo92
- 0 Comments
Mục lục
Tổng quan về Dịch vụ WCF
Khi phát triển ứng dụng cho kiến trúc máy khách/máy chủ, một trong những công nghệ phù hợp nhất trong .NET là khung Windows Communication Foundation (WCF). Đây là cơ sở hạ tầng giao tiếp hiện đại nhất được Microsoft cung cấp. Đây cũng là một trong những giải pháp tốt nhất để xây dựng các ứng dụng phân tán dựa trên Kiến trúc Hướng Dịch vụ (SOA). SOA nhấn mạnh việc xây dựng các thành phần phần mềm (dịch vụ) lỏng lẻo kết nối, có thể tái sử dụng và có thể triển khai độc lập. Các dịch vụ WCF đóng gói các chức năng kinh doanh cụ thể và tiếp xúc chúng với các máy khách qua mạng.
WCF là một .NET Framework thống nhất để xây dựng các ứng dụng dựa trên dịch vụ. WCF được giới thiệu lần đầu trong .NET Framework 3.0 và sau đó được mở rộng trong .NET 3.5 và .NET 4. WCF là nền tảng cho các công nghệ phân phối khác của Microsoft.
WCF cung cấp chức năng tương tự như dịch vụ Web, nhưng khác biệt duy nhất là dịch vụ Web sử dụng Giao thức Truyền tải Siêu Văn bản (HTTP) cho giao tiếp, trong khi WCF có thể sử dụng bất kỳ giao thức nào cho giao tiếp. Do đó, việc giao tiếp với các thành phần của các ngôn ngữ khác trở nên dễ dàng hơn. WCF thúc đẩy phát triển ứng dụng dựa trên các nguyên lý của SOA.
Mục đích của các dịch vụ WCF là đơn giản hóa việc phát triển các ứng dụng phân tán bằng cách cung cấp một khung giao tiếp linh hoạt, mở rộng và bảo mật. WCF trừu tượng hóa các phức tạp của các giao thức giao tiếp và cơ sở hạ tầng, cho phép các nhà phát triển tập trung vào việc triển khai logic kinh doanh và xây dựng các dịch vụ mạnh mẽ, tương thích lẫn nhau.
Một trong những lợi ích chính của việc sử dụng WCF là nó cũng hỗ trợ các giao thức độc quyền. WCF hỗ trợ các giao thức và giao thức truyền như SOAP với HTTP, TCP/IP và Named pipes.
SOAP là một giao thức nhẹ được sử dụng để trao đổi dữ liệu trong môi trường phân phối. SOAP sử dụng XML cho định dạng thông báo của nó và thường dựa vào HTTP để thương lượng và truyền thông. Nó được tạo ra bởi Microsoft và được W3C chấp nhận là tiêu chuẩn. SOAP được sử dụng như là lớp nền tảng cho các dịch vụ Web ASP.NET (ASMX) và cho WCF. Dịch vụ dựa trên SOAP đã được sử dụng hơn một thập kỷ. WCF có thể trao đổi dữ liệu và thông tin bằng các định dạng như SOAP, XML và JSON.
SOAP hiện được duy trì bởi W3C. Nó cũng được biết đến là giao thức Gọi thủ tục từ xa (RPC). Nó được thiết kế như một đặc tả giao thức để gọi các phương thức trên máy chủ, dịch vụ và đối tượng. Nó được phát triển như một cách độc lập với ngôn ngữ và đa môi trường để trao đổi dữ liệu có cấu trúc giữa các dịch vụ.
Hình bên dưới cho thấy cách một yêu cầu được gửi đến một dịch vụ WCF và cách dịch vụ phản hồi yêu cầu đó.
ABC của Dịch vụ WCF
Như thể hiện trong Hình trên, một máy khách gửi yêu cầu đến dịch vụ. Yêu cầu này đi dưới dạng thông điệp với một hoặc nhiều điểm cuối. Một điểm cuối dịch vụ xác định cách dịch vụ được tiếp xúc với các máy khách. Điểm cuối bao gồm A-Địa chỉ (Address), B-Liên kết (Binding), và C-Hợp đồng (Contract), mỗi phần được định nghĩa như sau:
- Địa chỉ (Address)
- Chỉ định vị trí của dịch vụ. Địa chỉ là một Định vị Tài nguyên Thống nhất (URL) được sử dụng bởi các ứng dụng khách để xác định vị trí dịch vụ.
- Liên kết (Binding)
- Chỉ định cách các máy khách nên giao tiếp với dịch vụ. Liên kết chỉ định việc mã hóa thông điệp, loại giao thức vận chuyển, chế độ bảo mật, hỗ trợ phiên, và các giao thức khác.
- Hợp đồng (Contract)
- Chỉ định các hoạt động được hỗ trợ bởi điểm cuối. Hợp đồng phải khớp với một trong các giao diện hợp đồng được triển khai bởi lớp dịch vụ.
Hãy khám phá chi tiết hơn về các yếu tố này cùng với các thuật ngữ khác như điểm cuối và lưu trữ.
Liên kết (Bindings)
Liên kết xác định cách giao tiếp xảy ra giữa máy khách và dịch vụ. Chúng chỉ định các giao thức, định dạng mã hóa, và các thiết lập giao tiếp khác. WCF cung cấp nhiều liên kết được định sẵn (ví dụ: BasicHttpBinding hoặc NetTcpBinding) phù hợp cho các tình huống giao tiếp khác nhau.
Contracts
- Service Contracts: Định nghĩa các hoạt động được cung cấp bởi dịch vụ.
- Data Contracts: Định nghĩa các kiểu dữ liệu được trao đổi giữa máy khách và dịch vụ.
- Message Contracts: Định nghĩa cấu trúc của các thông điệp được trao đổi giữa máy khách và dịch vụ.
Endpoints
- Đại diện cho các điểm kết nối qua đó máy khách có thể truy cập dịch vụ WCF.
- Bao gồm một địa chỉ, một liên kết, và một hợp đồng.
- Dịch vụ WCF có thể cung cấp nhiều điểm cuối để hỗ trợ các giao thức giao tiếp và định dạng thông điệp khác nhau.
Hosting
- Dịch vụ WCF có thể được lưu trữ trong các môi trường khác nhau, bao gồm Internet Information Services (IIS), dịch vụ Windows, ứng dụng tự lưu trữ, và Windows Process Activation Service (WPAS).
- Lưu trữ cung cấp cơ sở hạ tầng cần thiết để máy khách có thể khám phá và giao tiếp với dịch vụ.
Các Tính Năng và Thành Phần của WCF
Một số tính năng được cung cấp bởi WCF bao gồm:
- Các tính năng bảo mật như xác thực và ủy quyền.
- Các tính năng tinh chỉnh hiệu suất như điều tiết, đồng thời, và cân bằng tải.
- Các môi trường lưu trữ như IIS, dịch vụ Windows, và tự lưu trữ.
- Khung WCF kết hợp các lợi ích của nhiều công nghệ .NET khác nhau như Remoting, dịch vụ Web, dịch vụ Doanh nghiệp, các Tiêu chuẩn WSE, và dịch vụ Nhắn tin vào một mô hình thống nhất duy nhất.
Ba thành phần chính của Dịch vụ WCF là:
- Service Contracts (Hợp đồng dịch vụ)
- Hosting Environments (Môi trường lưu trữ)
- One or More Endpoints (Một hoặc nhiều điểm cuối)
Một ví dụ thực tế sẽ giúp hiểu rõ hơn về những yếu tố này. Hãy xem xét một người dùng muốn đi đến Boise, Idaho. Những bước nào người dùng cần thực hiện? Người dùng có thể quyết định phương thức đi lại trước và sau đó, đặt vé thông qua một đại lý du lịch hoặc tại một ga tàu, sân bay, hoặc cảng biển. Với WCF, trong một điểm cuối, kịch bản thực tế này có thể được ánh xạ với các yếu tố sau:
- Binding: Điều này có thể giống như xác định phương thức đi lại, tức là bằng đường hàng không, tàu hỏa, hoặc đường bộ. Tương tự, đối với các điểm cuối, binding đề cập đến việc xác định giao thức để triển khai dịch vụ.
- Address: Điều này có thể liên quan đến địa chỉ của đại lý du lịch hoặc ga tàu hoặc sân bay để đặt vé. Tương tự, trong các điểm cuối, địa chỉ đề cập đến URL tại đó dịch vụ được cung cấp. Trong WCF, các yêu cầu của người dùng được phục vụ bằng cách sử dụng một lớp dịch vụ, được định nghĩa trước trong ứng dụng. Người dùng có thể kết nối với các lớp dịch vụ này bằng một hoặc nhiều điểm cuối. Những dịch vụ này có thể chạy trên một máy từ xa hoặc trong một số trường hợp hiếm gặp là trên máy cục bộ.
- Contract: Điều này có thể liên quan đến mục đích sử dụng các yếu tố binding và address, tức là, để đến Boise. Tương tự, trong các điểm cuối, binding và address thực hiện dịch vụ được yêu cầu bởi một khách hàng. Contracts định nghĩa một phần quan trọng của kiến trúc. Data contract bao gồm các tham số tạo nên một thông điệp mà một dịch vụ có thể sử dụng. Message contract sử dụng các giao thức như SOAP, giúp kiểm soát chi tiết hơn về thông điệp. Service contract bao gồm các khai báo của các phương thức được sử dụng trong chúng. Các phương thức này được khai báo trong một giao diện, có thể được tạo bằng các ngôn ngữ lập trình như Visual Basic hoặc C#.
Chính Sách và Liên Kết trong WCF
Chính sách và liên kết áp dụng các điều kiện cần thiết để giao tiếp với một dịch vụ. Ví dụ, liên kết chỉ định giao thức vận chuyển, chẳng hạn như HTTP hoặc TCP, được sử dụng cho giao tiếp. Các yêu cầu bảo mật và các điều kiện khác được định nghĩa bởi chính sách.
Các loại binding khác nhau có thể được sử dụng dựa trên yêu cầu, bao gồm:
- BasicHttpBinding
- NetMsmqBinding
- NetTcpBinding
- WSHttpBinding
Endpoints
Endpoints là các Định danh Tài nguyên Toàn cầu (URI) được tiếp xúc với thế giới bên ngoài. Khách hàng có thể kết nối với các dịch vụ WCF từ các endpoints này. Có nhiều loại hosts được sử dụng để chạy một dịch vụ WCF. Việc lựa chọn host hoàn toàn phụ thuộc vào loại ứng dụng.
Một số hosts được sử dụng phổ biến bao gồm:
- Console Application
- Có thể là một host ứng dụng console đơn giản.
- Windows Service
- Dịch vụ WCF có thể được kiểm soát bởi Service Control Manager.
- Internet Information Services (IIS)
- Dịch vụ WCF có thể được lưu trữ trong IIS với điều kiện dịch vụ phải tiếp xúc ít nhất một endpoint HTTP.
- Microsoft Azure
- Dịch vụ WCF có thể được lưu trữ trên Microsoft Azure.
Sự khác biệt giữa ASP.NET Web API và WCF
Có những tình huống trong đó ASP.NET Web API không cung cấp giải pháp hoặc trong đó WCF cung cấp hạ tầng tốt hơn. Bảng bên dưới liệt kê những khác biệt chính giữa Web API và WCF.
Web API | WCF |
Hỗ trợ duy nhất HTTP và cho phép truy cập từ nhiều thiết bị di động, trình duyệt, v.v. | Hỗ trợ các giao thức truyền tải như TCP, HTTP, UDP và các giao thức tùy chỉnh. Cũng cho phép chuyển đổi giữa chúng. |
Cho phép xây dựng Web APIs hỗ trợ XML và JSON. | Hỗ trợ mã hóa nhị phân, văn bản, và Message Transmission Optimization Mechanism (MTOM). MTOM là một phương thức hiệu quả để gửi dữ liệu nhị phân đến và từ các dịch vụ Web. |
Sử dụng các giao thức và định dạng cơ bản như XML, HTTP, WebSockets, SSL, jQuery, và JSON. | Hỗ trợ xây dựng các dịch vụ với các tiêu chuẩn WS-* như bảo mật tin nhắn, giao dịch và tin nhắn tin cậy. |
Cho phép mô tả một Web API như HTML tự động sinh. | Cho phép mô tả các dịch vụ WCF SOAP trong WSDL. |
Được tích hợp sẵn trong .NET Framework, nhưng cũng có sẵn dưới dạng mã nguồn mở. | Được tích hợp sẵn trong .NET Framework. |
Tạo và Triển Khai Dịch Vụ WCF
Trước khi tạo một dịch vụ, nhà phát triển phải trả lời các câu hỏi sau: Chức năng nào sẽ được cung cấp bởi dịch vụ? Dịch vụ được đặt ở đâu? Làm thế nào để gửi tin nhắn tới dịch vụ và cách gọi nó?
Tạo Dịch Vụ WCF
Thực hiện theo các bước sau để tạo một dịch vụ WCF:
Bước 1: Khởi động Visual Studio 2022 IDE với một dự án WCF Service Library. Trong trường hợp này, đặt tên cho nó là StudentWCFServices.
Bước 2: Cung cấp đường dẫn để lưu trữ ứng dụng và nhấp OK. Hình bên dưới thể hiện quá trình tạo dự án WCF.
Mặc định, dự án tạo ra một lớp Service1.cs
và một giao diện IService1.cs
. Hình tiếp theo cho thấy các tệp này trong Solution Explorer. Hãy xóa các tệp mặc định này.
Bước 3:
Thêm một thư mục mới tên là Models
và một tệp lớp Model tên là StudentModel
vào thư mục này. Đoạn mã bên dưới thể hiện mã cần thêm vào lớp StudentModel
. Không gian tên System.Runtime.Serialization
được sử dụng trong phần using
để làm cho mô hình này có thể tuần tự hóa. Lớp mô hình được đánh dấu là DataContract
và mỗi thuộc tính được đánh dấu là DataMember
.
using System;
using System.Runtime.Serialization;
namespace StudentWCFServices.Models
{
[DataContract]
public class StudentModel
{
[DataMember]
public int StudentID { get; set; }
[DataMember]
public string StudentName { get; set; }
[DataMember]
public string StudentEmail { get; set; }
[DataMember]
public DateTime? JoiningDate { get; set; }
}
}
Bước 4:
Nhấp chuột phải vào dự án và thêm một giao diện IStudentService.cs
. Thêm mã vào giao diện, như được hiển thị trong Đoạn mã bên dưới. Lưu ý rằng không gian tên System.ServiceModel
được thêm vào phần using
, thuộc tính ServiceContract
được thêm vào cấp độ giao diện và OperationContract
ở cấp độ phương thức.
using StudentWCFServices.Models;
using System.Collections.Generic;
using System.ServiceModel;
namespace StudentWCFServices
{
[ServiceContract]
public interface IStudentService
{
[OperationContract]
IList<StudentModel> GetAll();
[OperationContract]
bool Create(StudentModel studentModel);
}
}
Bước 5:
Thêm một thư mục Data
mới vào dự án, nhấp chuột phải vào nó, và chọn Add→New Item→ADO.NET Entity Data Model
. Bây giờ, làm theo các hướng dẫn của wizard. Điều này sẽ tạo ra StudentDbEntities.DbContext
và thêm chuỗi kết nối vào tệp App.config
.
Bước 6:
Thêm một tệp lớp và đặt tên là StudentService.cs
để kế thừa từ IStudentService
.
using StudentWCFServices.Models;
using System.Collections.Generic;
using System.Linq;
namespace StudentWCFServices
{
public class StudentService : IStudentService
{
public IList<StudentModel> GetAll()
{
using (var context = new StudentDbEntities())
{
return context.Students.Select(s => new StudentModel
{
StudentID = s.StudentID,
StudentName = s.StudentName,
StudentEmail = s.StudentEmail,
JoiningDate = s.JoiningDate
}).ToList();
}
}
public bool Create(StudentModel studentModel)
{
using (var context = new StudentDbEntities())
{
var student = new Student
{
StudentID = studentModel.StudentID,
StudentName = studentModel.StudentName,
StudentEmail = studentModel.StudentEmail,
JoiningDate = studentModel.JoiningDate
};
context.Students.Add(student);
return context.SaveChanges() > 0;
}
}
}
}
Lớp này sẽ triển khai hai phương thức được thêm vào giao diện. Mã bên dưới thể hiện việc triển khai tệp lớp StudentService
.
using StudentWCFServices.Data;
using StudentWCFServices.Models;
using System.Collections.Generic;
using System.Linq;
namespace StudentWCFServices
{
public class StudentService : IStudentService
{
private readonly StudentDbEntities _context = new StudentDbEntities();
public IList<StudentModel> GetAll(double amount)
{
IList<StudentModel> studentModels = new List<StudentModel>();
var students = _context.Students.ToList();
foreach (var student in students)
{
var studentModel = new StudentModel
{
StudentID = student.StudentID,
StudentName = student.StudentName,
StudentEmail = student.StudentEmail,
JoiningDate = student.JoiningDate
};
studentModels.Add(studentModel);
}
return studentModels;
}
public bool Create(StudentModel studentModel)
{
var student = new Student
{
StudentName = studentModel.StudentName,
StudentEmail = studentModel.StudentEmail,
JoiningDate = studentModel.JoiningDate
};
_context.Students.Add(student);
_context.SaveChanges();
return true;
}
}
}
Tệp lớp Dịch vụ này triển khai các phương thức GetAll()
và Create()
của Student. Bây giờ, dịch vụ WCF đã sẵn sàng để chạy.
Bước 7:
Bước tiếp theo là thêm hợp đồng Binding vào tệp App.config
. Hợp đồng Binding được đưa ra trong Đoạn mã bên dưới. Mã này được thêm giữa các thẻ <system.serviceModel>
và </system.serviceModel>
. Cần phải loại bỏ hợp đồng Binding liên quan đến dịch vụ mặc định được thêm vào khi tạo ứng dụng.
<services>
<service name="StudentWCPServices.StudentService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/StudentWCFServices/StudentService/" />
</baseAddresses>
</host>
<!-- Điểm cuối dịch vụ -->
<!-- Trừ khi được xác định đầy đủ, địa chỉ là tương đối so với địa chỉ cơ sở được cung cấp ở trên -->
<endpoint address="" binding="basicHttpBinding" contract="StudentWCFServices.IStudentService">
<!-- Khi triển khai, phần tử danh tính sau đây nên được loại bỏ hoặc thay thế để phản ánh danh tính dưới đó dịch vụ triển khai chạy. Nếu bị loại bỏ, WCF sẽ tự động suy ra một danh tính phù hợp. -->
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<!-- Điểm cuối siêu dữ liệu -->
<!-- Điểm cuối Trao đổi Siêu dữ liệu được dịch vụ sử dụng để mô tả chính nó cho các khách hàng. -->
<!-- Điểm cuối này không sử dụng binding an toàn và nên được bảo mật hoặc loại bỏ trước khi triển khai -->
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
Bước 8
Chạy ứng dụng sẽ tải trình kiểm tra dịch vụ WCF, mặc định được tích hợp vào Visual Studio để kiểm tra dễ dàng các dịch vụ WCF. Hình bên dưới hiển thị trình kiểm tra dịch vụ WCF.
Bước 9:
Hai phương thức dịch vụ được thêm vào dịch vụ được liệt kê ở bên trái menu. Nhấp đúp vào phương thức GetAll()
. Điều này sẽ tải giao diện để thực thi phương thức GetAll()
.
Bước 10:
Nhấp vào Invoke để thực thi phương thức. Hình bên dưới hiển thị việc thực thi phương thức GetAll()
.
Bước 11:
Bây giờ, nhấp đúp vào phương thức Create()
. Điều này sẽ tải một biểu mẫu động để nhập dữ liệu vào Mô hình Student
với tất cả thông tin sinh viên.
Bước 12:
Sau khi cung cấp tất cả dữ liệu trong biểu mẫu động, nhấp vào Invoke để thực thi phương thức. Hình bên dưới cho thấy việc thực thi phương thức Create()
.
Cấu hình các Dịch vụ WCF
Tại điểm triển khai, tệp cấu hình được cấu hình với dịch vụ WCF cung cấp sự linh hoạt trong việc cung cấp địa chỉ đầu cuối và dữ liệu hành vi dịch vụ. Công nghệ cấu hình .NET Framework được sử dụng để cấu hình một dịch vụ WCF. Thêm các phần tử XML vào tệp web.config cho một trang IS lưu trữ dịch vụ WCF là rất phổ biến. Các phần tử này làm cho việc thay đổi chi tiết trên từng máy trở nên khả thi. Những thay đổi có thể là các địa chỉ đầu cuối (các địa chỉ thực tế được sử dụng để giao tiếp với dịch vụ). Cùng với đó, WCF cũng bao gồm nhiều phần tử do hệ thống cung cấp, giúp lựa chọn nhanh các tính năng cơ bản cho một dịch vụ.
Các điểm cuối (Endpoints) là hạ tầng chính cho giao tiếp trong một dịch vụ WCF. Các điểm cuối cung cấp cho khách hàng quyền truy cập vào các chức năng được cung cấp bởi một dịch vụ WCF. Mỗi điểm cuối bao gồm bốn thuộc tính, như sau:
- Address (Địa chỉ)
- Binding (Ràng buộc)
- Contract (Hợp đồng)
- Behaviors (Hành vi)
Cách sử dụng cơ bản cho mỗi thuộc tính này trong cấu hình thông qua web.config
như sau:
Địa chỉ
<endpoint address="http://localhost/MyService" binding="..." contract="..."/>
Trong ví dụ này, địa chỉ chỉ định vị trí của điểm cuối.
Ràng buộc
<endpoint address="http://localhost/MyService" binding="wsHttpBinding" contract="..."/>
Ở đây, wsHttpBinding
chỉ định chính sách ràng buộc sẽ được sử dụng.
Hợp đồng
<endpoint address="http://localhost/MyService" binding="wsHttpBinding" contract="IMinfo"/>
Ở đây, hợp đồng IMinfo chỉ định dịch vụ hợp đồng phải được truy cập bởi máy chủ.
Ngôn ngữ Mô tả Dịch vụ Web (WSDL) được sử dụng để định nghĩa dịch vụ Web và hợp đồng dịch vụ Web. Đây là một tài liệu XML, chứa các thẻ tùy chỉnh được sử dụng để định nghĩa các phần tử và thuộc tính của dịch vụ. WSDL cũng định nghĩa một cách tiêu chuẩn trong đó một dịch vụ Web có thể được truy cập.
Định nghĩa các Hợp đồng
Cú pháp sau giúp tạo một ServiceContract
và OperationContract
trong mã:
[ServiceContract]
public interface <Name of interface>
{
[OperationContract]
void Operation();
}
Cú pháp cho Các Ràng buộc Mới
Cú pháp sau giúp tạo một phiên bản ràng buộc mới:
<specify binding type> binding = new <specify binding type>();
Cú pháp sau giúp tạo các điểm cuối trong mã:
Uri MyUri = new Uri("<specify address>");
<specify binding type> binding = new <specify binding type>();
ServiceHost.AddEndpoint(typeof(<specify the service interface>), binding, MyUri);
Tạo và Cấu hình Các Ràng buộc cho Dịch vụ WCF
Để chỉ định các chi tiết giao tiếp cần thiết để kết nối đến các điểm cuối của một dịch vụ WCF, các đối tượng gọi là ràng buộc được sử dụng. Một ràng buộc được xác định rõ là cần thiết cho mỗi điểm cuối trong một dịch vụ WCF. Các nhà phát triển phải hiểu các loại chi tiết giao tiếp khác nhau được định nghĩa bởi các ràng buộc, các loại ràng buộc nào được bao gồm trong WCF, và v.v.
Các Ràng buộc WCF
Có thể có thông tin cơ bản hoặc phức tạp trong một ràng buộc. Chỉ có giao thức vận chuyển như HTTP được định nghĩa trong ràng buộc cơ bản nhất. Điều này được sử dụng để kết nối đến điểm cuối. Thông thường, thông tin được chứa trong một ràng buộc về cách kết nối đến một điểm cuối được phân loại vào một trong các loại sau:
- Protocols (Giao thức): Xác định cơ chế bảo mật được sử dụng: hoặc khả năng nhắn tin đáng tin cậy hoặc cài đặt luồng ngữ cảnh giao dịch.
- Encoding (Mã hóa): Mã hóa thông tin trong thông điệp (ví dụ: văn bản hoặc nhị phân).
- Transport (Vận chuyển): Xác định giao thức vận chuyển cơ bản để sử dụng (ví dụ: TCP hoặc HTTP).
Các Ràng buộc WCF do Hệ thống Cung cấp
Các ràng buộc do hệ thống cung cấp và thiết kế của chúng được xây dựng để xử lý các yêu cầu của ứng dụng. Một số ví dụ về các ràng buộc do hệ thống cung cấp bao gồm:
- BasicHttpBinding: Thích hợp để kết nối với các dịch vụ Web tuân theo mô tả của WS-I Basic Profile (ví dụ: các dịch vụ dựa trên ASP.NET Web services).
- WSHttpBinding: Đây là một ràng buộc tương thích để kết nối với các điểm cuối tuân theo các giao thức WS-*.
- NetMsmqBinding: Ràng buộc này sử dụng .NET Framework để tạo kết nối giữa các thông điệp xếp hàng với các điểm cuối WCF khác.
- NetTcpBinding: Ràng buộc này phù hợp để sử dụng trong mạng cục bộ, cung cấp hiệu suất cao hơn so với các ràng buộc HTTP.
- NetNamedPipeBinding: Kết nối với các điểm cuối WCF khác trên cùng một máy, sử dụng .NET Framework.
Tích hợp với Azure Service Bus Relay
Azure Service Bus là một trình điều phối thông điệp hoạt động như một trung gian cho việc nhắn tin. Nó nằm giữa nhiều thành phần ứng dụng đám mây hoặc giữa đám mây và các ứng dụng tại chỗ, cho phép chúng truyền thông tin thông qua các thông điệp. Service Bus hoạt động dựa trên khái niệm đa người thuê. Theo khái niệm đa người thuê, có thể sử dụng cùng một dịch vụ bởi nhiều người dùng. Các nhà phát triển ứng dụng sẽ tạo một namespace bao gồm một hoặc nhiều cơ chế truyền thông được chỉ định.
Azure Service Bus Relay
Các ứng dụng doanh nghiệp thường bao gồm nhiều tính năng dưới dạng các thành phần, dịch vụ, và v.v. Chúng thường không đơn giản hoặc dễ dàng để làm việc. Việc hợp nhất các thành phần khác nhau của một ứng dụng doanh nghiệp vào một hệ thống duy nhất không phải là nhiệm vụ dễ dàng ngay cả khi tất cả chúng đều nằm ở cùng một địa điểm. Nó càng trở nên khó khăn hơn nếu bất kỳ thành phần nào nằm trên đám mây.
Các ứng dụng lai là các ứng dụng doanh nghiệp dựa trên Microsoft Azure. Các ứng dụng này bao gồm vai trò Web và worker, cho phép lưu trữ dữ liệu trong SQL Database, và tùy chọn, giao tiếp với các nhà cung cấp dịch vụ bên thứ ba để xác thực hoặc hoàn thành các nhiệm vụ khác. Có thể rằng các ứng dụng này sử dụng một số thành phần tại chỗ khó di chuyển lên đám mây.
Service Bus Relay hữu ích trong việc xây dựng các ứng dụng lai đám mây hoạt động trong trung tâm dữ liệu Azure và môi trường tại chỗ. Service Bus Relay hữu ích trong các ứng dụng lai đám mây. Nó xem xét các dịch vụ WCF Web đã có sẵn và chuẩn bị chúng để truy cập các giải pháp dựa trên đám mây mà không làm gián đoạn các điều khoản bảo mật hoặc hạ tầng.
Có thể lưu trữ các dịch vụ WCF sử dụng Service Bus Relay trong môi trường doanh nghiệp hiện có. Service Bus hoạt động trong Azure có thể được chỉ định với các yêu cầu và phiên làm việc mà các dịch vụ WCF này nhận được. Các dịch vụ này sau đó được tiết lộ cho mã ứng dụng thực thi trong Azure hoặc cho các công nhân di động hoặc môi trường đối tác extranet.
Hai loại khả năng nhắn tin của Service Bus bao gồm:
Tạo Azure Service Bus
Các bước sau được thực hiện để tạo một Service Bus trong Azure:
- Đăng nhập vào tài khoản Azure với ID người dùng/hộp thư hợp lệ và mật khẩu.
- Trong bảng điều khiển, chọn Tất cả dịch vụ ở bên trái, điều này sẽ tải tất cả các dịch vụ có sẵn trong Azure Portal.
- Cuộn xuống và trong phần Tích hợp, tìm Service Bus. Hình bên dưới hiển thị phần Tích hợp và Service Bus.
Tích hợp Azure Service Bus Relay vào WCF
Để tích hợp Azure Service Bus Relay, làm theo các bước sau:
Bước 1: Mở ứng dụng WCF và cài đặt gói NuGet của Service Bus có tên Microsoft Azure Service Bus.
Bước 2: Tìm kiếm Service Bus và chọn mục Microsoft Azure Service Bus.
Bước 3: Mở tệp App.config và thêm một <endpoint>
mới bên trong thẻ <service>
. Đoạn mã bên dưới cho thấy khai báo endpoint.
<endpoint contract="StudentWCFServices.IStudentService"
binding="netTcpRelayBinding"
address="sb://studentwcf.servicebus.windows.net/solver"
behaviorConfiguration="sbTokenProvider" />
Bước 4: Thêm bên trong. Đoạn mã bên dưới cho thấy khai báo hành vi của endpoint.
<endpointBehaviors>
<behavior name="sbTokenProvider">
<transportClientEndpointBehavior>
<tokenProvider>
<sharedAccessSignature keyName="RootManageSharedAccessKey"
key="rEBt814FpQzeknEUP1mPd+L5rQpukUxxxxxxxxxxxxxx" />
</tokenProvider>
</transportClientEndpointBehavior>
</behavior>
</endpointBehaviors>
Tạo Proxy Sử Dụng SvcUtil
Svcutil.exe
cho phép tải xuống siêu dữ liệu từ các dịch vụ đang hoạt động và lưu chúng vào các tệp cục bộ. Svcutil.exe
cố gắng khôi phục siêu dữ liệu với sự trợ giúp của WS-MetadataExchange và XML Web Service Directory cho các URL lược đồ HTTP và HTTPs và nó chỉ sử dụng WS-MetadataExchange để khôi phục siêu dữ liệu cho tất cả các URL lược đồ khác.
Công cụ Tiện ích Siêu dữ liệu ServiceModel, cụ thể là svcutil.exe
, có thể được tìm thấy dưới thư mục Bin trong vị trí cài đặt SDK Windows cục bộ.
Svcutil.exe
sử dụng các ràng buộc được chỉ định trong lớp MetadataExchangeBindings
mặc định. Người dùng phải chỉ định một điểm cuối khách hàng trong tệp cấu hình cho Svcutil.exe
(svcutil.exe.config
) trong khi cấu hình ràng buộc được sử dụng cho WS-MetadataExchange. Điểm cuối khách hàng nên sử dụng hợp đồng IMetadataExchange và phải có cùng tên với Chỉ mục Nguyên tài ngữ đồng thời (URI) của địa chỉ điểm cuối siêu dữ liệu.
Svcutil.exe
tạo ra một Binding BasicHttpBinding cho dịch vụ với một điểm cuối BasicHttpContextbinding với thuộc tính allowCookies được thiết lập thành true. Các cookie này được sử dụng cho ngữ cảnh trên máy chủ. Khi dịch vụ sử dụng các cookie này, người dùng có thể thay đổi cấu hình thủ công để sử dụng một ràng buộc ngữ cảnh để quản lý ngữ cảnh trên khách hàng.
Tạo Proxy bằng cách Tạo Tham Chiếu Dịch Vụ
Giao tiếp giữa một client và một dịch vụ Web diễn ra thông qua các tin nhắn SOAP. Những tin nhắn này bao gồm các tham số đầu vào và đầu ra dưới dạng XML. Các tin nhắn SOAP được gửi qua mạng sau khi một lớp proxy ánh xạ các tham số thành các phần tử XML. Điều này giúp lớp proxy giải phóng người dùng khỏi việc giao tiếp với dịch vụ Web ở mức độ SOAP và cho phép gọi các phương thức của dịch vụ Web trong môi trường phát triển hỗ trợ SOAP và các proxy dịch vụ Web.
Để tạo proxy client WCF trong Visual Studio 2022, làm theo các bước sau (dịch vụ phải đang chạy để tạo proxy WCF client):
Bước 1: Nhấp chuột phải vào dự án chứa proxy client WCF khi dịch vụ đang chạy và chọn Add Service Reference.
Bước 2: Nhập URL của dịch vụ cần gọi vào hộp thoại Add Service Reference và nhấp Go. Điều này sẽ hiển thị danh sách các dịch vụ có sẵn tại địa chỉ chỉ định trong hộp thoại.
Bước 3: Để xem các hợp đồng và thao tác có sẵn, double-click vào dịch vụ, gán một namespace cho mã được tạo và sau đó nhấp OK.
Giải pháp Đảm Bảo Khả Năng Sẵn Sàng Cao cho Dịch Vụ WCF
Khả năng sẵn sàng cao (HA) là khả năng của một hệ thống cung cấp dịch vụ cho người dùng cuối mà không bị gián đoạn trong một khoảng thời gian nhất định. Khả năng sẵn sàng cao giảm thiểu hoặc (lý tưởng là) loại bỏ thời gian ngừng dịch vụ bất kể sự cố nào xảy ra (mất điện, lỗi phần cứng, lỗi phần mềm, mất kết nối với nhà cung cấp đám mây, v.v.).
Trong WCF, khả năng sẵn sàng cao đề cập đến khả năng duy trì tính sẵn có và chức năng của dịch vụ mặc dù có nhiều lỗi hoặc sự cố khác nhau, giảm thiểu thời gian ngừng và đảm bảo dịch vụ liên tục cho khách hàng.
Một số giải pháp khả năng sẵn sàng cao và mục đích của chúng trong WCF bao gồm:
Tolerant to faults (Kháng lỗi): Dịch vụ WCF phải có khả năng kháng lỗi, có nghĩa là nó có thể xử lý và khôi phục một cách tinh tế từ các lỗi phần cứng, lỗi phần mềm, vấn đề mạng hoặc ngoại lệ không mong đợi. Các kỹ thuật như chính sách thử lại, thiết bị cắt mạch và suy giảm dịu giúp đạt được khả năng kháng lỗi.
Redundancy (Dự phòng): Dự phòng là rất quan trọng cho khả năng sẵn sàng cao. Nó bao gồm triển khai nhiều phiên bản của dịch vụ WCF trên môi trường phân tán như máy chủ hoặc trung tâm dữ liệu. Nếu một phiên bản gặp sự cố, các phiên bản khác có thể tiếp tục hoạt động mà không làm gián đoạn.
Load balancing (Cân bằng tải): Cân bằng tải phân phối các yêu cầu đến dịch vụ WCF qua nhiều phiên bản để tối ưu hóa việc sử dụng tài nguyên và ngăn chặn quá tải. Các trình cân bằng tải giám sát sức khỏe phiên bản và định tuyến lưu lượng một cách thích hợp, tránh các phiên bản không hoạt động hoặc quá tải.
Failover mechanisms (Cơ chế chuyển đổi): Cơ chế chuyển đổi phát hiện và phản ứng với các sự cố bằng cách chuyển hướng yêu cầu từ các phiên bản không hoạt động hoặc không lành mạnh đến các phiên bản khác. Điều này có thể bao gồm chuyển hướng tự động qua trình cân bằng tải hoặc các kỹ thuật gom cụm và sao chép.
Statelessness (Không lưu trạng thái): Thiết kế dịch vụ WCF để không lưu trạng thái giảm sự phụ thuộc vào các phiên bản cụ thể. Dịch vụ không lưu trạng thái không giữ lại trạng thái của client giữa các yêu cầu, cho phép bất kỳ phiên bản nào xử lý các yêu cầu đến mà không cần sự phụ thuộc vào phiên hoặc các phiên dán dính.
Monitoring and Alerting (Giám Sát và Cảnh Báo): Hệ thống Giám sát và Cảnh báo hiệu quả liên tục giám sát sức khỏe và hiệu suất của dịch vụ, cảnh báo các quản trị viên về các vấn đề tiềm ẩn trước khi chúng làm gián đoạn sẵn sàng dịch vụ. Giám sát tích cực cho phép can thiệp nhanh chóng và giải quyết vấn đề.
Scalability (Khả năng Mở Rộng): Khả năng mở rộng là yếu tố quan trọng để xử lý nhu cầu ngày càng tăng trong khi duy trì hiệu suất. Mở rộng theo chiều ngang bao gồm thêm các phiên bản, trong khi mở rộng theo chiều dọc tăng cường tài nguyên. Cả hai phương pháp này đảm bảo sẵn sàng dịch vụ liên tục dưới tải nặng.