Thứ tư, ngày 7 tháng 12 năm 2016

WCF – Self-hosted Service đơn giản

Ngày đăng: 13/4/2012, 9:18:4PM | Lượt xem: 5,368
Hot!

Từ những kiến thức căn bản trong bài WCF – Một số khái niệm cơ bản, bạn sẽ hiểu rõ hơn về các ứng dụng WCF bằng cách thực hành một vài ví dụ cơ bản. Bài viết này sẽ cung cấp cho bạn ví dụ về tạo hai dự án WCF Service self-hosting và WCF client đơn giản dạng Console.

WCF Service Hosting EnvironmentTừ những kiến thức căn bản trong bài WCF – Một số khái niệm cơ bản, bạn sẽ hiểu rõ hơn về các ứng dụng WCF bằng cách thực hành một vài ví dụ cơ bản. Bài viết này sẽ cung cấp cho bạn ví dụ về tạo hai dự án WCF Service self-hosting và WCF client đơn giản dạng Console.

WCF Service

Thêm các tham chiếu

Trước tiên, ta tạo một dự án Console với tên SimpleWcfService. Sau đó bạn cần thêm tham chiếu đến hai assembly là System.ServiceModel.dll và System.Runtime.Serialization.dll. Trong tập tin sẽ chứa mã service contract và data contract, bạn thêm hai namespace sau:

System.ServiceModel

System.Runtime.Serialization

VS - Add Reference

Data Contract

Trong ví dụ này, tôi sẽ tạo một service có chức năng tính các phép tính đơn giản trên số nguyên, phân số và trả về kết quả tương ứng. Như vậy bạn cần có một class phân số làm Data contract:

[DataContract]
public class Fraction
{
    [DataMember]
    public int Numerator { get; set; }
    [DataMember]
    public int Denominator { get; set; }
}

Service Contract

Tạo một service contract với hai operation contract là Hello và Add.

[ServiceContract]
public interface IFooService
{
    [OperationContract]
    int Add(int x, int y);
    [OperationContract]
    Fraction Multiply(Fraction x, Fraction y);
}

Sau đó tạo một class hiện thực service contract này:

public class FooService: IFooService
{
    public int Add(int x, int y)
    {
        return x + y;
    }
    public Fraction Multiply(Fraction x, Fraction y)
    {
        return new Fraction()
        {
            Numerator = x.Numerator * y.Numerator,
            Denominator = x.Denominator * y.Denominator
        };
    }

}

Hosting environment

Để chạy một service self-hosting, ta cần tạo một đối tượng ServiceHost làm môi trường để service hoạt động. Đối tượng ServiceHost cần biết được service class và địa chỉ chứa các service. Địa chỉ mà ta sẽ truyền cho ServiceHost là địa chỉ chính mà client sẽ truy xuất tới để lấy được thông tin của các service (mỗi service cụ thể được truy xuất thông qua một endpoint với sub-address).

WCF Service Hosting Environment

 

Uri baseAddress = new Uri("http://localhost:12345/YinYang");
ServiceHost host = new ServiceHost(typeof(FooService), baseAddress);

Ta cũng cần thiết lập để host cho phép các request HTTP GET từ client có thể truy xuất các metadata thông qua giao thức này:

ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
host.Description.Behaviors.Add(smb);

Endpoint: cung cấp 3 thông tin cần thiết theo mô hình ABC. Ta sẽ đăng kí một Endpoint vào host với ba thông tin tương ứng là Contact (IFooService), Binding và Address (SimpleFooService) với phương thức AddServiceEndpoint().

BasicHttpBinding binding = new BasicHttpBinding();
binding.MessageEncoding = WSMessageEncoding.Text;

host.AddServiceEndpoint(typeof(IFooService), binding, "SimpleFooService");

Chạy Service

try
{
    host.Open();
    Console.WriteLine("Foo Service is running.");
    Console.WriteLine("Press Enter to close this service.");
    Console.ReadLine();

    host.Close();
}
catch (Exception ex)
{
    host.Abort();
    Console.WriteLine(ex);
}

WCF Client

Sau khi đã xong dự án service, bạn cần chuyển sang dự án SimpleWcfService và nhấn F5 để chạy service. Như thế, các ứng dụng client mới có thể truy xuất đến để lấy các thông tin cần thiết để làm việc.

Tạo một ứng dụng Console (hoặc WinForms, WPF,…) với tên SimpleWcfClient. Nhấn phải vào mục References trong Solution Explorer chọn Add Service Reference… Trong hộp thoại hiện ra, bạn dán địa chỉ của host vào (http://localhost:12345/YinYang) và nhấn Go. Bạn sẽ thấy được các thông tin của service contract và các operation contract. Ở đây tôi dùng tên mặc định cho tham chiếu này là ServiceReference1.

VS - Add Service Reference

Sau khi thêm tham chiếu, bạn có thể mở tập tin app.config để xem các cấu hình vừa được tạo ra tự động. Thông tin mà bạn cần chú ý là các endpoint được tạo ra dùng để kết nối đến service:

<client>
    <endpoint address="http://localhost:12345/YinYang/SimpleFooService"
        binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_IFooService"
        contract="ServiceReference1.IFooService" name="BasicHttpBinding_IFooService" />
</client>

Kiểm tra kết quả (đảm bảo rằng service của bạn đang chạy trước khi chạy client):

class Program
{
    static void Main(string[] args)
    {
        ServiceReference1.FooServiceClient foo = new ServiceReference1.FooServiceClient();

        Console.WriteLine(foo.Add(10, 2)); // Output:  12

        var frac1 = new ServiceReference1.Fraction() { Numerator = 1, Denominator = 2 };
        var frac2 = new ServiceReference1.Fraction() { Numerator = 2, Denominator = 3 };
        var frac3 = foo.Multiply(frac1, frac2);

        Console.WriteLine(frac3.Numerator+"/"+frac3.Denominator); // Output: 2/6

        Console.Read();
    }
}

WCF Self-hosting service - demo - output
YinYang’s Blog

 Chia sẻ qua: 
Hot!
Ý kiến bạn đọc

These items will be permanently deleted and cannot be recovered. Are you sure?

Gallery

image

Maecenas viverra rutrum pulvinar

Maecenas viverra rutrum pulvinar! Aenean vehicula nulla sit amet metus aliquam et malesuada risus aliquet. Vestibulum rhoncus, dolor sit amet venenatis porta, metus purus sagittis nisl, sodales volutpat elit lorem…

Read more

Text Links

Thiết kế logo chuyên nghiệp Insky
DAFABET
W88 w88b.com/dang-ky-tai-khoan-w88
W88
Copyright © 2011 - 2012 vietshare.vn by phamkhuong102@gmail.com doanhkisi2315@gmail.com. All rights reserved.