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

Hosting WCF Service bằng ứng dụng Console Application

Bài viết này nhằm hướng dẫn cho bạn cách thiết lập dịch vụ đơn giản và vận hành nó bằng ứng dụng Console Application. Bạn sẽ thấy việc xây dựng một dịch vụ WCF và kết nối để sử dụng nó thật dễ dàng.

Bài viết được hiệu đính bởi Lê Hoàng Dũng (tumivn).
WCF là nền tảng của Microsoft giúp bạn có thể xây dựng được các dịch vụ cung cấp dữ liệu cho các ứng dụng từ nhiều nền tảng khác nhau có thể kết nối và sử dụng. Với WCF bạn có thể cung cấp các dịch vụ thông qua nhiều giao thức khác nhau chỉ bằng một lần cài đặt duy nhất cho dịch vụ và cấu hình bằng mã lệnh hoặc tập tin cấu hình (XML) để cấu hình các giao thức mà dịch vụ hỗ trợ.
Bài viết này nhằm hướng dẫn cho bạn cách thiết lập dịch vụ đơn giản và vận hành nó bằng ứng dụng Console Application. Bạn sẽ thấy việc xây dựng một dịch vụ WCF và kết nối để sử dụng nó thật dễ dàng.
Có nhiều cách khác nhau để host một dịch vụ WCF. Bạn có thể sử dụng :
  • IIS
  • WAS
  • Windows Service
  • Managed Code: Console application, Windows Form, WPF…
Trong bài viết này, tôi sẽ hướng dẫn các bạn cách xây dựng 1 console application đơn giản để chứa 1 service.

Bước 1: Bạn tạo 1 project Console Application tên MyCalculatorService. Service chỉ có 3 phương thức chính:
  • Hello()
  • HelloWorld()
  • Add()
Bước 2: Bạn cần tham chiếu đến 2 assembly là System.ServiceModel.dll và System.RuntimeSerialization.dll
Pic 1
Bước 3:
Tạo interface ISimpleCalculator, thêm thuộc tính ServiceContract và DataContract vào class và hàm như bên dưới. Đối với dữ liệu tự định nghĩa, bạn phải thêm thuộc tính DataContract:

    [ServiceContract()]
    public interface ISimpleCalculator
    {
        [OperationContract]
        string HelloWorld();        

        [OperationContract]
        string Hello(Person person);

        [OperationContract]
        int Add(int num1, int num2);
    }

    [DataContract]
    public class Person
    {
        [DataMember]
        public string FirstName { get; set; }

        [DataMember]
        public string LastName { get; set; }
    }
 

Service Contract: Đị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).
Operation Contract: Chỉ ra phương thức được gắn thuộc tính là phương thức của dịch vụ.
Đối với kiểu dữ liệu tự định nghĩa, bạn phải báo cho WCF kiểu dữ liệu cần trao đổi với client và thêm thuộc tính DataContract cho class và DataMember cho các trường thuộc tính trong class
Bước 4:
Tạo class SimpleCalculatorService thực thi từ Interface ISimpleCalculator

    public class SimpleCalculatorService: ISimpleCalculator
    {
        public string HelloWorld()
        {
            return "Hello World";
        }

        public string Hello(Person person)
        {
            return "Hello " + person.FirstName;
        }

        public int Add(int num1, int num2)
        {
            return num1 + num2;
        }
    }
 

Bước 5:
ServiceHost là class chính để host dịch vụ WCF. Bạn cần truyền contract class và base address cho ServiceHost. Bạn có thể đăng ký nhiều base addresses cách nhau bởi dấu phẩy, nhưng mỗi địa chỉ phải khác nhau về phương thức.

            var httpUrl = new Uri("http://localhost:8090/MyService/SimpleCalculatorService");

            var tcpUrl = new Uri("net.tcp://localhost:8090/MyService/SimpleCalculatorService");

            var host = new ServiceHost(typeof(SimpleCalculatorService), httpUrl, tcpUrl);
 

Bạn có thể đăng ký nhiều Endpoint bằng phương thước ServiceHost.AddServiceEndpoint().
Bước 6:
Thực thi host để chạy Service

using System;
using System.Globalization;
using System.ServiceModel;
using System.ServiceModel.Description;

namespace SimpleSelfHostInWCF
{
    class Program
    {
        static void Main()
        {
            //Create a URI to serve as the base address
            var httpUrl = new Uri("http://localhost:8090/MyService/SimpleCalculatorService");
            //Create ServiceHost
            var host = new ServiceHost(typeof(SimpleCalculatorService), httpUrl);
            //Add a service endpoint
            host.AddServiceEndpoint(typeof(ISimpleCalculator)
            , new WSHttpBinding(), "");
            //Enable metadata exchange
            var smb = new ServiceMetadataBehavior
                          {
                              HttpGetEnabled = true
                          };
            host.Description.Behaviors.Add(smb);
            //Start the Service
            host.Open();

            Console.WriteLine("Service is host at " + DateTime.Now.ToString(CultureInfo.InvariantCulture));
            Console.WriteLine("Host is running... Press <Enter> key to stop");
            Console.ReadLine();

        }
    }
}
 

Bước 7: Tạo chương trình để Test Serivice
Bạn tạo 1 Console Application gọi là Client. Bạn phải tạo 1 proxy class (lớp đại diện thực hiện việc kết nối với Service) cho client. Có nhiều cách để thực hiện:
  • Sử dụng SvcUtil.exe, bạn phải tạo proxy class và file app.config với end points.
  • Thêm Service reference cho chương trình client.
  • Thực thi lớp ClientBase<T>
Ở đây mình chọn cách 2.
Nhấp phải vào Project=> Add Service Reference. Gõ địa chỉ hostUrl: http://localhost:8090/MyService/SimpleCalculatorService
Add Service Reference
Trong file App.config, bạn chú ý đến dòng sau:

<client>
            <endpoint address="http://localhost:8090/MyService/SimpleCalculatorService"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISimpleCalculator"
                contract="CalculatorService.ISimpleCalculator" name="WSHttpBinding_ISimpleCalculator">
                <identity>
                    <userPrincipalName value="Crystal-PC\Crystal" />
                </identity>
            </endpoint>
        </client>
 


<client>
            <endpoint address="http://localhost:8090/MyService/SimpleCalculatorService"
                binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_ISimpleCalculator"
                contract="CalculatorService.ISimpleCalculator" name="WSHttpBinding_ISimpleCalculator">
                <identity>
                    <userPrincipalName value="Crystal-PC\Crystal" />
                </identity>
            </endpoint>
        </client>
 

WSHttpBinding_ISimpleCalculator: tên Endpoint để kết nối với Service
Nếu bạn chỉ có duy nhất 1 Endpoint, bạn không cần chỉ ra tên Endpoint khi kết nối.
Trường hợp 1 Endpoint:

var pp = new SimpleCalculatorClient(); 

Trường hợp nhiều EndPoint:

var pp1 = new SimpleCalculatorClient(“FirstEndpointName”);
var pp2 = new SimpleCalculatorClient(“SecondEndpointName”);
 

Bước 8: Thực thi chương trình

    class Program
    {
        static void Main(string[] args)
        {
            var pp = new SimpleCalculatorClient("WSHttpBinding_ISimpleCalculator");//hoặc sử dụng var pp = new SimpleCalculatorClient("");
            Console.WriteLine(pp.HelloWorld());
            Console.WriteLine(pp.Hello(new Person{ FirstName = "Binh Trong", LastName = "An"}));
            Console.WriteLine(pp.Add(5, 3));
            pp.Close();
            Console.ReadKey();
        }
    }
 
 Client
Như vậy bạn đã thành công trong việc xây dựng cho mình một ứng dụng Console dùng để host WCF Service!
Download demo: MediaFire
Happy coding!

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.