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 là 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!

Programer said
Post Webservices “Chung khoan, Thoi tiet”
Programer said
I wanted Webservices
Thank!
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.
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!
vinh said
Thanks
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 ^^!
gau con said
Bai viet rat chi tiet va day du hiiiiiii
HT said
Thanks thầy giáo. Bài viết rất dễ hiểu.
tuoi hong tho ngay said
Very useful. Thanks very much.
thanthoai2114 said
Cảm ơn nhiều nhé! rất ý nghĩa!
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
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.
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!!!
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…)
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.
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!
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
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 ạ
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 ạ !
vovanhai said
Bạn có chắc chắn Port trên máy bạn là:51667??
huy said
thanks nhièu
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.
vovanhai said
Add Service Reference…
CaMapDen said
hichic tui cũng hok thấy “add web References” đâu.
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!
vovanhai said
port trên máy của bạn nó khác chứ! Đấy là port trên máy tôi!
Đàm Huy Mạnh said
@CaMapDen: Dùng windows application bạn phải chọn “Add Services References”
Và thay “ConvertWS” = “ConvertWSSoapClient”.
Chúc thành công!
Đàm Huy Mạnh said
@Hieu: Với Java bạn có thể xem tại đây
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 ạ!
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.
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
Võ Văn Hải said
Vậy xin mrDanh trả lời dùm! Thanks!
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
tun tun said
private ConsumeConvertWS.convertWS.ConvertWS ws;
nó báo lỗi ở đây _._”
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
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
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
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 ???
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?
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 !
hieu said
Thua thay no bao loi o:private ConsumeConvertWS.convertWS.ConvertWS ws;
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
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
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 đó ?
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/
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
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.
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 ạ?
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