Chuyển đến nội dung chính

WCF: Hello World Example

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.

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: LibraryServiceSolution
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
[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.VisualStudioWCFConnectedService
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:

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 Framework
Download 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

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.