Trong bài viết này, mình sẽ hướng dẫn xây dựng 1 project WCF đơn giản, thêm thông tin vào file App.config, và sử dụng WCF service trong môi trường .NET Core.
Ba thành phần chính của một WCF service là:
– Service class: định nghĩa các contact (sẽ trình bày ở bên dưới).
– Hosting environment: WCF service có thể được host lên nhiều “môi trường” khác nhau, bao gồm IIS, Windows service, Selt-hosting.
– End point: Các “cổng” kết nối giữa client và service.
Bạn reference tới System.ServiceModel
Bạn tạo mới Book model, thêm attribute DataContract cho class Book và DataMember cho các property
Thêm LibraryService
Một endpoint là 1 tập hợp gồm address, binding, và contract theo mô hình kết nối ABC
A – Address (Where): xác định địa chỉ của service
B – Binding (How): Cách giao tiếp với service.
C – Contact (What): Bản mô tả các chức năng của service.
Ban đầu, app.config sẽ có nội dung như sau:
Mở file Program.cs, thêm đoạn code sau:
Lỗi này xuất hiện là do bạn chưa định nghĩa behaviors.
Bạn thêm dòng định nghĩa behavior sau thẻ services
Thêm Service References
Thay đổi namespace “ServiceReference1” thành NetFrameworkServiceReference
Trong file Program.cs, bạn thêm đoạn code sau:
Tool->Extensions and Updates, gõ WCF.
Bạn sẽ thấy kết quả:
Nhấp vào Download để tiến hành tải về và cài đặt.
Nhấp phải vào dependencies, chọn Add Connectd Service
Nhấp chọn Microsoft WCF Web Service Reference Provider
Thay đổi Uri và Namespace, sau đó click nút Next.
Bạn cứ để như mặc định và nhấp nút Finish
Mở file Program.cs, bạn gõ đoạn code như sau:
Download Example: https://www.mediafire.com/file/6cbknooqwjuo1q2
Chúc các bạn thành công.
WCF là gì?
WCF (Windows Communication Foundation) là một framework dùng để xây dựng kiến trúc hướng dịch vụ (Service Oriented Architecture – SOA). Mục đích của WCF là tạo một công nghệ thống nhất cho các công nghệ giao tiếp trước đây như: Web Services, .NET Remoting, Microsoft Message Queuing và COM+.Ba thành phần chính của một WCF service là:
– Service class: định nghĩa các contact (sẽ trình bày ở bên dưới).
– Hosting environment: WCF service có thể được host lên nhiều “môi trường” khác nhau, bao gồm IIS, Windows service, Selt-hosting.
– End point: Các “cổng” kết nối giữa client và service.
Tạo Project WCF Service
Bạn tạo mới 1 Console Application (.NET Framework) tên: LibraryServiceSolutionBạn reference tới System.ServiceModel
Bạn tạo mới Book model, thêm attribute DataContract cho class Book và DataMember cho các property
[DataContract]
public class Book
{
[DataMember]
public int ID { get; set; }
[DataMember]
public string Name { get; set; }
}
Thêm interface ILibraryService, đánh dấu ServiceContract cho interface, OperationContract cho các method.
[ServiceContract]
public interface ILibraryService
{
[OperationContract]
Book SearchBook(string bookName);
}
Thêm LibraryService
public class LibraryService : ILibraryService
{
private List books;
public LibraryService()
{
books = new List<Book>();
for (int i = 0; i < 20; ++i)
{
books.Add(new Book { ID = i, Name = "Name " + i });
}
}
public Book SearchBook(string bookName)
{
return books.Find(w => w.Name == bookName);
}
}
Cấu hình WCF Service
Trong phần này, chúng ta sẽ định nghĩa endpoint và cho phép lấy metadata của dịch vụ.Một endpoint là 1 tập hợp gồm address, binding, và contract theo mô hình kết nối ABC
A – Address (Where): xác định địa chỉ của service
B – Binding (How): Cách giao tiếp với service.
C – Contact (What): Bản mô tả các chức năng của service.
Ban đầu, app.config sẽ có nội dung như sau:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
</startup>
</configuration>
Đầu tiên, giả sử chúng ta có 1 bản config đơn giản:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="LibraryServiceSolution.LibraryService">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9999/LibraryService"/>
</baseAddresses>
</host>
<endpoint address="" binding="basicHttpBinding" contract="LibraryServiceSolution.ILibraryService"></endpoint>
</service>
</services>
</system.serviceModel>
</configuration>
Ta có hình minh họa:- Ở dòng 3, “system.serviceModel” là parent tag, chứa tất cả cấu hình của WCF services.
- Ở dòng 4, thẻ "services" chứa tất cả định nghĩa WCF service name và endpoint.
- Ở dòng 5, thẻ “service” chứa định nghĩa của các service cụ thể, thuộc tính “name” của thẻ service chứa tên của lớp thực thi interface [ServiceContract”] với namespace.
- Dòng 6,7, 8 định nghĩa base address của LibraryService. Base address là phần đầu của địa chỉ và phần thứ hai của địa chỉ được định nghĩa trong endpoint.
- Dòng thứ 11 định nghĩa endpoint, địa chỉ, binding, và contract. Địa chỉ là 1 chuỗi rỗng, và địa chỉ cuối cùng của WCF service là baseAddress + address
Mở file Program.cs, thêm đoạn code sau:
static void Main(string[] args)
{
var server = new ServiceHost(typeof(LibraryService));
server.Open();
Console.WriteLine("Your service is started...");
Console.ReadLine();
server.Close();
}
Chạy Project, vào địa chỉ: http://localhost:9999/LibraryService sẽ thấy thông báo: Metadata publishing for this service is currently disabled.Lỗi này xuất hiện là do bạn chưa định nghĩa behaviors.
Bạn thêm dòng định nghĩa behavior sau thẻ services
<behaviors>
<serviceBehaviors>
<behavior name="LibraryServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
Trong thẻ services, bạn thêm attribute behaviorConfiguration
behaviorConfiguration="LibraryServiceBehavior"
Cuối cùng, bạn sẽ có file App.config
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<services>
<service name="LibraryServiceSolution.LibraryService" behaviorConfiguration="LibraryServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:9999/LibraryService"/>
</baseAddresses>
</host>
<endpoint address="" binding="basicHttpBinding" contract="LibraryServiceSolution.ILibraryService"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="LibraryServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
Chạy console application lần nữa, refresh trình duyệt, bạn sẽ có kết quả:
Sử dụng WCF trong .NET Framework
Tạo 1 project Console Application (.NET Framework).Thêm Service References
Thay đổi namespace “ServiceReference1” thành NetFrameworkServiceReference
Trong file Program.cs, bạn thêm đoạn code sau:
var client = new LibraryServiceClient();
var book = client.SearchBook("Name 12");
Console.WriteLine("Book ID : " + book.ID);
Console.ReadLine();
Chạy chương trình, bạn sẽ có kết quả:
Sử dung WCF trong .NET Core
Với phiên bản .NET Core, bạn sử dụng library Microsoft WCF Web Service Reference Provider https://marketplace.visualstudio.com/items?itemName=WCFCORETEAM.VisualStudioWCFConnectedServiceTool->Extensions and Updates, gõ WCF.
Bạn sẽ thấy kết quả:
Nhấp vào Download để tiến hành tải về và cài đặt.
Nhấp phải vào dependencies, chọn Add Connectd Service
Nhấp chọn Microsoft WCF Web Service Reference Provider
Thay đổi Uri và Namespace, sau đó click nút Next.
Bạn cứ để như mặc định và nhấp nút Finish
Mở file Program.cs, bạn gõ đoạn code như sau:
Task.Run(async () =>
{
var client = new LibraryServiceClient();
var book = await client.SearchBookAsync("Name 12");
Console.WriteLine("Book ID : " + book.ID);
Console.ReadLine();
}).GetAwaiter().GetResult();
Kết quả chương trình sẽ giống như bên .NET FrameworkDownload Example: https://www.mediafire.com/file/6cbknooqwjuo1q2
Tham khảo
Chúc các bạn thành công.
Nhatkyhoctap's blog
Nhận xét
Đăng nhận xét