Võ Văn Hải's blog

Chỉ có một điều tuyệt đối đó là mọi thứ đều tương đối…

Tạo Web service với C# step-by-step

Ở đây chúng ta có 1 ví dụ về tạo 1 web service cho việc chuyển đổi tiền tệ từ tiền Việt Nam sang tiền USD và Euro, cũng như việc chuyển ngược lại.

IDE sử dụng ở đây chúng ta dùng bộ VS 2008, và ngôn ngữ lập trình C#.

PDF version here

A. Tạo Web Service

1. Trong môi trường Visual Studio, Ta chọn File->New->Project

Ở đây ta chọn Template là “ASP.Net Web Service Application”, điền và tên Prject là ConvertCurrency, chọn thư mục lưu trữ. Nhấn OK, ta được

2. Xóa Service1.asmx bằng cách chọn nó và nhấn phím delete. Ta sẽ thêm 1 service mới bằng cách nhấn chuột phải lên project, chọn Add->New Item.

Chọn Template Web Service, Đặt tên cbo nó là ConvertWS.asmx, Nhấn nút Add ta được 1 web service tên ConvertWS trên Solution Explorer.

3. Code cho các service methods như sau

using System;

using System.Collections;

using System.ComponentModel;

using System.Data;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

namespace ConvertCurrency

{

/// <summary>

/// Web service này dùng chuyển đổi ngoại tệ từ tiền Việt sang USD,

/// Euro và ngược lại

/// </summary>

[WebService(Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

[ToolboxItem(false)]

public class ConvertWS : System.Web.Services.WebService

{

private const double USD_RATE = 16740;

private const double EUR_RATE = 18960;

[WebMethod]

public double VND2USD(double dong)

{

return dong/USD_RATE;

}

[WebMethod]

public double VND2EUR(double dong)

{

return dong / EUR_RATE;

}

[WebMethod]

public double USD2VND(double usd)

{

return usd * USD_RATE;

}

[WebMethod]

public double EUR2VND(double eur)

{

return eur * EUR_RATE;

}

}

}

4. Chạy ứng dụng bằng cách nhấn F5, VS sẽ triển khai ứng dụng. Kết quả như sau

Nếu bạn muốn xem WSDL của service, ta nhấn link “Service Description” ta có

Ghi nhớ lại link này để còn dùng về sau : http://localhost:1291/ConvertWS.asmx?WSDL

5. Để thử service, ta có thể chọn bất kỳ link nào trong 4 link EUR2VND, USD2VND VND2EUR, VND2USD. Ở đây ta thử link USD2VND, kết quả như sau

Nhập usd có giá trị 100, nhấn Invoke, kết quả nhận được là

Như vậy là chúng ta đã tạo được 1 Web Service, bây giờ chúng ta có thể triển khai 1 ứng dụng client được rồi.

B. Tạo Consumer

1. Tạo ứng dụng Windows Application bằng cách nhấn phải chuột lên Solution trong project Explorere, chọn Add->New Project

Chọn Template “Windows Form Application”, đặt tên là ConsumeConvertWS, nhấn OK, ta được

Nhấn chuột phải lên project vừa tạo, chọn “Set as StartUp Project” để đảm bảo project vừa tạo là project sẽ được thực thi khi nhấn F5.

2. Trong Project Explorer, nhấn chuột phải lên References, chọn “Add Web Reference…”

Gõ vào URL đến WSDL vào ô URL, nhấn nút Go, kết quả như sau

Đặt tên cho Web reference name convertWS. Nhấn nút “Add Reference”. Ta có kết quả sau trên Project Explorer

3. Thiết kế form như hình sau

Đặt tên cho TextBox là txtMoney, Label hiển thị kết quả là lblKetQua

4. Viết code cho các nút

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

namespace ConsumeConvertWS

{

public partial class Form1 : Form

{

private ConsumeConvertWS.convertWS.ConvertWS ws;

public Form1()

{

InitializeComponent();

ws = new ConsumeConvertWS.convertWS.ConvertWS();

}

private void VND2USD_Click(object sender, EventArgs e)

{

double mon = Double.Parse(txtMoney.Text);

double usd = ws.VND2USD(mon);

lblKetQua.Text = usd.ToString();

}

private void VND2EUR_Click(object sender, EventArgs e)

{

double mon = Double.Parse(txtMoney.Text);

double usd = ws.VND2EUR(mon);

lblKetQua.Text = usd.ToString();

}

private void USD2VND_Click(object sender, EventArgs e)

{

double mon = Double.Parse(txtMoney.Text);

double usd = ws.USD2VND(mon);

lblKetQua.Text = usd.ToString();

}

private void EUR2VND_Click(object sender, EventArgs e)

{

double mon = Double.Parse(txtMoney.Text);

double usd = ws.EUR2VND(mon);

lblKetQua.Text = usd.ToString();

}

}

}

5. Chạy thử nghiệm

C. Kết luận

Vậy là chúng ta đã tạo được 1 web service đơn giản và 1 client để tiêu thụ web service này. Các bạn nếu có tham vọng tìm hiểu sâu hơn về web service với VS thì có thể tham khảo thêm trong bộ MSDN. Chúc may mắn!

51 Responses to “Tạo Web service với C# step-by-step”

  1. Programer said

    Post Webservices “Chung khoan, Thoi tiet”

  2. Programer said

    I wanted Webservices
    Thank!

  3. kallich said

    Thanks! nhưng không hiểu sao nếu New một “Win application” tôi không thể “Add Web Reference” được. Còn nếu New một “Web site” thì ok. Tôi sài visual 2008.

  4. vovanhai said

    Trên cửa sổ Solotion Explorer, bạn nhấn phải chuột lên project cần thêm tham chiếu chọn “Add Web Reference”. Chúc vui!

  5. vinh said

    Thanks

  6. Kat said

    Cám ơn …. tôi mới học lập trình . Chúc bạn viết thêm những bài viết thật bổ ích cho những người vỡ lòng thế này . Cám ơn rất nhiều ^^!

  7. gau con said

    Bai viet rat chi tiet va day du hiiiiiii

  8. HT said

    Thanks thầy giáo. Bài viết rất dễ hiểu.

  9. tuoi hong tho ngay said

    Very useful. Thanks very much.

  10. Cảm ơn nhiều nhé! rất ý nghĩa!

  11. hieu said

    Em muốn kết nối 1 csdl bình thường trong webservices đối với asp.net thì sao. Mong thầy có thể hướng dẩn và cho em 1 đemo được không. Em mới học asp.net. Cảm ơn thầy trước

  12. vovanhai said

    Thì cứ nối bình thường chứ sao! Nối csdl, viết 1 web method trả về kiểu dữ liệu là dataset.

  13. Nguyen Thanh Tra said

    thu thay!! em dang lam mot web service nhung khong biet cach trien khai no len IIS.thay co the chi gium em cach trien khai no len IIs khong a ? em cam on thay nhieu!!!

    thay co the lam mot demo don gian nhu :giai phuong trinh bac nhat roi trien khai no len IIS de mot may clien truy cap vao va lay web service giai phuong trinh bac I ve thuc thi.(neu IIS co cau hinh gi dac biet thi thay chi gium luon vi em moi biet cau hinh bang cach vao control panel va cau hinh no vay thoi ha )

    teo mot web service binh thuong thi em lam duoc roi nhung khong biet trien khai len IIS mong thay giup do!!

    vi em dang o tiem NET nen khong go tieng viet duoc mong thay thong cam!!!

  14. Trà said

    em đã tao một dịch vụ web(vd:dich vu giải phương trinh bậc 1)em muôn triển khai lên IIS của windows(không cài domain mà dùng localhost) thầy giúp em với.(khi triển khai thay vì dụng URL :http://locahost:port/baitap/giaiptbacI… thì ta chỉ dùng http://locahost/baitap/giaiptbacI…)

  15. vovanhai said

    TÔi đoán vấn đề bạn gặp là bạn dùng location là File System thay vì dùng HTTP. Trong lúc bạn tạo 1 project bạn chọn Location là HTTP thì nó sẽ triển khai trên IIS là bạn không phải dùng port nữa.

  16. ngochuy said

    E chào Thầy
    e đang làm đồ án về bán vé tàu.em muốn làm webservice để cung cấp cho khách sạn,công ty hay tổ chức đặt vé tàu thì làm ntn ạ.mong Thầy góp ý cho e
    E xin cảm ơn Thầy!

  17. tra said

    minh co dung HTTP nhưng không chạy được, nhưng khi dùng file system thì chạy được.
    ban có thể làm một project mẫu không và chụp hình lai gửi cho mình không?project công hai số thô(email: ngthtra@yahoo.com.vn0

  18. hoang said

    Thầy có thể chỉ rõ cho e phần bảo mật trong webservice không ?
    Ví dụ e muốn cập nhật thông tin lên webservice nhưng chỉ có admin mới được cập nhật, e ko muốn ai có quyền cập nhật
    E tìm được trên mạng họ bảo là dùng csdl mặc định
    ASPNETDB.MDF
    và thiết lập quyền truy cập cho các method
    [WebMethod]
    [PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
    [PrincipalPermission(SecurityAction.Demand, Role = "Editors")]
    public void UpdateCategories(DiscountDataSet.CategoriesDataTable categories) {
    new DiscountDataSetTableAdapters.CategoriesTableAdapter().Update(categories);
    }
    Dể sử dụng phương thức updatecategories thì phải có quyền trên
    vậy làm thế nào để cập nhật thêm ạ

  19. mbk said

    khi gõ URL thì của em bị báo lỗi kết nối:
    There was an error downloading ‘http://localhost:51667/ConvertWS.asmx?WSDL’.
    Unable to connect to the remote server
    No connection could be made because the target machine actively refused it 127.0.0.1:51667

    thầy chỉ cho em cách khắc phục với ạ !

  20. vovanhai said

    Bạn có chắc chắn Port trên máy bạn là:51667??

  21. huy said

    thanks nhièu

  22. dvtran said

    Em chào thầy, em mới học lập trình, trong ví dụ của thầy em không thể add Web References trên ứng dụng Window form, em dùng vs 2008, có cách nào add được không thầy, em làm nhưng thầy nói nhứng không thấy link “add Web References” khi nhấn chuột phải vào project.

  23. vovanhai said

    Add Service Reference…

  24. CaMapDen said

    hichic tui cũng hok thấy “add web References” đâu.

  25. Khanh said

    em da lam dung trinh tu ,web service da chay nhung khi tao form thi chay no khong hien thi ket qua la 1674000 nhu trong demo o tren ,nho thay chi cach cho ket qua hien thi . Cam on!

  26. vovanhai said

    port trên máy của bạn nó khác chứ! Đấy là port trên máy tôi!

  27. @CaMapDen: Dùng windows application bạn phải chọn “Add Services References”
    Và thay “ConvertWS” = “ConvertWSSoapClient”.
    Chúc thành công!

  28. @Hieu: Với Java bạn có thể xem tại đây

  29. ngoc son said

    Thưa thầy, em gọi được service trên cùng 1 máy, nhưng làm với 2 máy khác nhau thì không được. Em đã cài đặt IIS cho cả 2 máy kết nối LAN với nhau, service cũng đã được đặt trong IIS. Em qua máy còn lại và tạo 1 ứng dụng gọi service, trong phần add web references, em gõ url như sau: http://192.168.1.2/…. (thay localhost bằng địa chỉ máy chứa service). Nhưng không được, nó báo không tìm thấy ứng dụng. Không biết là em bị lỗi ở đâu? Mong thầy hướng dẫn ạ!

  30. Võ Văn Hải said

    Bạn có chắc là 2 máy có thấy nhau không đã. Ví dụ trong browser bên máy B bạn gõ: http://tên_máy_A thử thế nào. Nó OK thì hãy thử tiếp. Còn nó chưa OK thì chưa nối được 2 máy huống chi là WS.

  31. mrDanh said

    Ông Hải trả lời cái bảo mật trong WS không được nên hỏi lại lung tung.
    Ông biết thì nói, không biết thì hỏi tui nè.
    ThoDT

  32. Võ Văn Hải said

    Vậy xin mrDanh trả lời dùm! Thanks!

  33. tun tun said

    sao mình làm thế này mà nó báo lỗi
    Error 1 The type or namespace name ‘ConvertWS’ does not exist in the namespace ‘ConsumeConvertWS.convertWS’ (are you missing an assembly reference?) F:\Documents\My Project\CSharp\WCF\ConvertCurrency\ConsumeConvertWS\Form1.cs 14 44 ConsumeConvertWS

    mặc dù đã add service rồi

    help

  34. tun tun said

    private ConsumeConvertWS.convertWS.ConvertWS ws;
    nó báo lỗi ở đây _._”

  35. tun tun said

    à
    em làm được rồi
    bác Hải đểu thật,chữa sai mấy chỗ làm em mò mãi
    dù sa0 cũng thank bác :D

  36. Etty said

    Em đang làm bài về Web Service giải pt bậc 2 nhưng làm mà nó vẫn chưa ra kq đúng.
    Anh có bài đó hay tương nhự không có thể cho em tham khảo với:)
    Mail:mynhanvolam90dnnnn@yahoo.com.vn

  37. nguyen_tiendung27 said

    ban oi !! co the làm bài giải phương trình bậc 2 web service tren c# ko ban bạn neu duoc cho minh xin code nha>> thank you …….minh dang rat cần….mong bạn sớm hồi âm

  38. Trịnh Thị Kim Ngân said

    Thầy ơi, cho em hỏi, tại sao không sử dụng gridview trong trình duyệt web ???

  39. huu tho said

    em chào thầy. thầy cho em hỏi sao em click phải chuột vào references thì lại ko có add web references j hết. ở project “ConvertCurrency” thì có thế add web references nhưng ở project “ConsumeConvertWS” thì ko đc j hết?

  40. yeucongnghe said

    Thầy ơi,cái phần 1 thì e làm ok rồi nhưng đến đoạn
    “2. Trong Project Explorer, nhấn chuột phải lên References, chọn “Add Web Reference…””
    e làm theo như vậy nhưng làm đi làm lại cũng không thấy cái “Add Web Reference” trên Project mới tạo(ConsumeConvertWS) ở đâu
    hết cả.Mong thầy coi lại chỉ giúp giùm e.
    E xin cảm ơn !

  41. hieu said

    Thua thay no bao loi o:private ConsumeConvertWS.convertWS.ConvertWS ws;

  42. lucky_star_it said

    lạ nhỉ chữ “add web reference ” thì chỉ cần chuột phải vào nhìn thấy ngay mà, nhưng thay vì chữ đấy, thì có thể và add reference mà, nói chung là có bạn nào làm về mã hóa, giải mã, chữ ký số, chứng thực chữ ký số không cho t xin code được không, t đang cần nó, nhưng mà t lại không biết làm, vì huuu t k biết nhiều về lập trình :(

  43. lucky_star_it said

    nếu bạn nào đã làm về giải pháp an toàn trong TMDT rùi thì có thể send t code về ns đc không, thank các bạn rất nhiều, nếu có có thể gửi mail này cho t đc không chu.thuy.it@gmail.com

  44. Quý said

    bạn ơi đây là mình tao web service và sử dụng web service vừa tạo để ứng dụng trên from đúng ko ? vậy khi ứng dụng trên web thì cũng thể a2h ? còn vấn đề mình sử dụng web service đã có sẵn và tìm nguồn ở đâu ,mình tham khảo thấy đó là các cổng kết nối h làm sao tìm các cổng đó ?

  45. Võ Văn Hải said

    Sử dụng ở đâu cũng thế thôi (win foem hay web form cũng vậy). Các UDDI có trên web rất nhiều. Mình hay dùng trang http://webservices.seekda.com/

  46. leader said

    Dear T.Hai

    Cho em hỏi ti.
    Em có một combobox trong window forms. Giờ em muốn dùng Web Services để có thể add hoặc remove danh sách tên trong list thì em phải viết thế nào trong Web SV và như thế nào trong Windown Form. Em cũng mới tham khảo qua lĩnh vực này nên không hiểu lắm. Bt ở trên thi em làm được rùi, chạy OK.
    Email: vietnguyen1511@gmail.com

  47. Võ Văn Hải said

    webservice của em có dịch vụ trả về kiều dataset chứa danh sách mong muốn, sau đó bên client đọc ds đó về và add vào combo.

  48. Tùng said

    Em chào thầy,

    Em đang tìm hiểu về ASP .NET Web service em có một số thắc mắc mong thầy giải đáp giúp ạ:

    Em có một web service giả sử là: http://localhost:1291/ConvertWS.asmx connect tới một hệ thống khác(luôn được chạy) để lấy dữ liệu

    1. Sau một thời gian hoạt động thì web service http://localhost:1291/ConvertWS.asmx không thể connect được nữa. Khi mình connect vào url: http://localhost:1291/ConvertWS.asmx thì page luôn ở trạng thái loading. Lỗi này có thể là do những nguyên nhân gì ạ?
    2. Liệu mình có thể chạy ASP .NET Web service trên các hệ điều hành khác như LINUX… không ạ?

  49. minhtam said

    Em đang làm đồ án về website thi trắc nghiệm trực tuyến áp dụng giao thứ HTTP và viết bằng C#, mong thày giúp đỡ tài liệu

  50. Nhung said

    E chào thầy.Em mới học về web service nên cũng chưa biết nhiều ạ.Thầy cho e hỏi bh nếu như e muốn lên web nhập ID thì nó hiện lên thông tin của 1 người bao gồm Họ Tên,Năm Sinh,Địa Chỉ,Điện Thoại.Mà e chưa biết cách làm với SQL thì có cách nào k ạ?Thầy hướng dẫn e cách làm với ạ.Em cảm ơn thầy

  51. mai said

    a co the chi cho e vjet customer winform va webform du bao thoj tjet nhu the nao dc k

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
Follow

Get every new post delivered to your Inbox.

Join 2,193 other followers

%d bloggers like this: