Sử dụng Web Service do chúng ta xây dựng tương tự như việc sử dụng các lớp đối tượng. Ví dụ:
Dim phep_toan As New WS_PHEP_TOAN lblKet_qua.Text = phep_toan.Cong_hai_so(4, 6)
3.2.2 Sử dụng Web Services được cung cấp miễn phí trên mạng
Để biết được những Web Services được cung cấp miễn phí trên mạng, các bạn có thể dùng google để thực hiện tìm kiếm. Ở đây, chúng tôi giới thiệu đến các bạn trang:
http://www.webservicex.net cung cấp khá nhiều các Web Services hữu ích.
Trong phần này, chúng tôi sẽ hướng dẫn bạn sử dụng các Web Services để lấy thông tin tỷ giá ngoại tệ, thông tin thời tiết, các thành phố chính của một quốc gia và các đơn vị tiền tệ của các quốc gia trên thế giới.
Các bước thực hiện:
Bước 1.Chọn Add Web Reference… từ thực đơn ngữ cảnh của ứng dụng
Thêm WebService vào ứng dụng
Bước 2.Nhập thông tin đường dẫn của WebService, nhấn để thực hiện việc xác thực Web Service.
Bước 3.Nếu Web Service được xác thực thành công, thông tin mô tả về Web Service sẽ được hiển thị ngay phía bên dưới. Trong ví dụ này, chúng ta lần lượt xác thực 3 Web Service sau:
http://www.webservicex.net/country.asmx?WSDL Các quốc gia http://www.webservicex.net/globalweather.asmx?WSDL Thời tiết http://www.webservicex.net/CurrencyConvertor.asmx?WSDL Tỷ giá
Tham chiếu Web Service
Bước 4.Đặt tên tham chiếu cho WebService: Web reference name.
Bước 5.Nhấn Add Reference để hoàn tất tham chiếu WebService. Bảng trên mô tả các phương thức và tài liệu hướng dẫn của WebService
Danh sách các Web Service được tham chiếu Bước 6.
Màn hình thiết kế
Viết lệnh xử lý: 'Lấy tỉ giá ngoại tệ
Dim tgNgoai_te As New Ws_Ty_gia.CurrencyConvertor lblUSD.Text = tgNgoai_te.ConversionRate( _ Ws_Ty_gia.Currency.USD, Ws_Ty_gia.Currency.VND) lblEUR.Text = tgNgoai_te.ConversionRate( _ Ws_Ty_gia.Currency.EUR, Ws_Ty_gia.Currency.VND) lblGBP.Text = tgNgoai_te.ConversionRate( _ Ws_Ty_gia.Currency.GBP, Ws_Ty_gia.Currency.VND) 'Lấy thông tin thời tiết các thành phố chính
Dim lWeather As New Ws_Thoi_tiet.GlobalWeather
lblHN.Text = lWeather.GetWeather("Ha Noi", " Viet Nam ")
lblHCM.Text = lWeather.GetWeather("Ho Chi Minh", " Viet Nam ") lblThanh_pho.Text = lWeather.GetCitiesByCountry(" Viet Nam ") 'Lấy tên các quốc gia và đơn vị tiền tệ trên thế giới
Dim lCountry As New Ws_Quoc_gia.country lblDon_vi.Text = lCountry.GetCurrencyCode()
lblQuoc_gia.Text = lCountry.GetCountries()
Tỷ giá ngoại tệ và thông tin thời tiết được lấy từ WebService vào lúc: 9:30:00 AM ngày 13/06/2005 (giờ Việt nam). Lúc các bạn thi hành, các giá trị này có thể thay đổi.
3.3. Xây dựng Web Services truy xuất dữ liệu
Web Service: WS_KHACH_HANG
Trong phần này, chúng ta phối hợp các lớp xử lý đã có để xây dựng Web service WS_KHACH_HANG. Trong ví dụ minh họa dưới đây, chúng ta xây dựng ba thủ tục:
-Doc_danh_sach_khach_hang -Them_khach_hang
-Xoa_khach_hang <WebMethod()> _
Public Function Doc_danh_sach_khach_hang() As DataSet Dim lKhach_hang As New XL_KHACH_HANG
Dim lDataset As New DataSet lDataset.Tables.Add(lKhach_hang) Return lDataset End Function --- --- <WebMethod()> _
Public Function Them_khach_hang(ByVal pHo_kh As String, _ ByVal pTen_kh As String, _
ByVal pNgay_sinh As Date, _ ByVal pGioi_tinh As Boolean, _ ByVal pDia_chi As String, _ ByVal pTen_dn As String, _
ByVal pMat_khau As String) As Boolean Try
Dim lKhach_hang As New XL_KHACH_HANG Dim lDr As DataRow
lDr = lKhach_hang.NewRow() lDr("Ho_khach_hang") = pHo_kh lDr("Ten_khach_hang") = pTen_kh lDr("Ngay_sinh") = pNgay_sinh
lDr("Gioi_tinh") = pGioi_tinh) lDr("Dia_chi") = pDia_chi lDr("Ten_dang_nhap") = pTen_dn lDr("Mat_khau") = pMat_khau lKhach_hang.Rows.Add(lDr) lKhach_hang.Ghi_du_lieu() Return True Catch ex As Exception Return False End Try End Function <WebMethod()> _
Public Function Xoa_khach_hang(ByVal pMkh As Long) Dim lKhach_hang As New XL_KHACH_HANG
lKhach_hang.Xoa_dong(pMkh) End Function
Trong Web service trên, chúng ta có sử dụng một số phương thức từ lớp XL_KHACH_HANG. Để sử dụng, chúng ta cần bổ sung các phương thức sau vào lớp XL_KHACH_HANG:
'Xác định chỉ số của dòng có mã số tương ứng
Public Function Lay_chi_so(ByVal pMa_so As Integer) As Long Dim i as Long
For i = 0 To Me.So_dong() - 1
If Me.Rows(i)(Khoa) = pMa_so Then Return i
End If Next Return -1 End Function
Public Sub Xoa_dong(pMa_so as Long) Dim lChi_so as Long = Lay_chi_so(pMa_so)
If lChi_so >= 0 Then Try Me.Rows(lChi_so).Delete() Ghi_du_lieu() Catch e As Exception End Try End If End Sub
Public Sub Ghi_du_lieu() Try mDa_Bo_doc_ghi.Update(Me) Me.AcceptChanges() Catch e As Exception Me.RejectChanges() End Try End Sub
Kiểm tra Web Service
Sau khi thiết kế thành công WS_KHACH_HANG, chúng ta tiến hành kiểm tra Web service vừa tạo.
Danh sách các phương thức của WS_KHACH_HANG
Thi hành phương thức Doc_danh_sach_khach_hang
Kết quả:
Kết quả dưới dạng XML
Sử dụng Web Service WS_KHACH_HANG
Sau khi xây dựng và kiểm tra thành công WS_KHACH_HANG, chúng ta sử dụng web service vừa tạo vào ứng dụng.
Viết lệnh xử lý:
Private Sub Page_Load(…) Handles MyBase.Load Dim lKhach_hang As New WS_KHACH_HANG
dtgKhach_hang.DataSource = lKhach_hang.Doc_danh_sach_khach_hang dtgKhach_hang.DataBind()
End Sub
Phần 4: Ứng dụng dịch vụ web để xây dựng hệ thống đặt vé tàu qua mạng Internet
4.1 Giới Thiệu
Để có thể hiểu hơn, nắm vững hơn về các kiến thức của Webservice cũng như khả năng ứng dụng triển khai thì phần dưới đây em sẽ thực hiện một Demo ứng dụng đơn giản, cụ thể :
+Xây dựng một WebService để tìm kiếm kết quả về thông tin liên quan đến số lượng, giá vé, ngày giờ. Với đầu vào là nơi đi, đích đến
+Xây dựng một WebService để ghi lại dữ liệu của việc đặt mua.
+Xây dựng một webform dành cho khách hàng đặt vé tàu có sử dụng 2 webservice trên .
4.2 Thiết kế Cơ Sở Dữ Liệu
Bảng 1 : Chi tiết Tàu
Chức năng : Lưu trữ thông tin về chi tiết về các đoàn tàu STT Tên trường
Kiểu
DL Diễn giải NULL
1 Ma Tau nchar Mã Tàu Không được phép 2 TenTau nchar Tên Tàu Được phép
3 SoLuong int Số Lượng Ghế Tối Đa Của Tàu Được phép Bảng 2: Khách
Chức năng : Lưu trữ thông tin về Khách
STT Tên trường
Kiểu
DL Diễn giải NULL
1 SoBaoDanh nchar Số Báo Danh Không được phép 2 TenKhach nchar Tên Khách Được phép
Bảng 3: Tuyến
Chức năng : Lưu trữ thông tin về chi tiết về các tuyến
STT Tên trường
Kiểu
DL Diễn giải NULL
1 Ma Tuyen nchar Mã Tuyến Không được phép
2 GaDi nchar Ga Đi Được phép
3 GaDen nchar Ga Đến Được phép
Bảng 4: Lịch Tàu
Chức năng : Lưu trữ thông tin về chi tiết về Lịch trình các đoàn tàu
STT Tên trường KiểuDL Diễn giải NULL 1 Ma Lich nchar Mã Lịch
Không được phép
2 MaTau nchar Mã Tàu Được phép
4 Time datetime tàuThời gian khởi hành of chuyến Được phép 5 GiaVe Int Giá cho một vé Được phép 6 ChoTrong Int
Số chổ trống còn lại trên chuyến
tàu Được phép
Bảng 5: Đăt Vé
Chức năng : Lưu trữ thông tin về chi tiết về việc đặt vé của Khách
STT Tên trường KiểuDL Diễn giải NULL
1 Ma DatVe nchar Mã Tuyến Không đượcphép 2 SoBaoDanh nchar Số Báo Danh Được phép 3 MaLich nchar Mã Lịch Được phép
4 SoVe Int Số Vé Đặt Được phép
4.3 Xây Dựng WebService WS_VETAU
Xây dựng một WebService có tên WS_TAU để tìm kiếm kết quả về thông tin liên quan đến số lượng, giá vé, ngày giờ. Với đầu vào là nơi đi, đích đến
publicclass WS_VETAU : System.Web.Services.WebService
{ [WebMethod] publicstring HelloWorld()
{ return"Hello World"; }
[WebMethod]
public DataSet WS_TimKiem(string gadi, string gaden, DateTime time, refint kt)// Webservice co the chi ho tro dataset ma khon ho tro Datatable
{ cls_VeTau BL_VeTau = new cls_VeTau();
return BL_VeTau.TimKiemLichTau(gadi, gaden, time, ref kt); }
}
4.4 Xây Dựng Webservice WS_GHIDULIEU
Xây dựng một WebService có tên WS_GHIDULIEU để ghi lại dữ liệu của việc đặt mua với đầu vào là số báo danh, mã lich, số vé, biến kiểm tra
publicclass WS_GHIDULIEU : System.Web.Services.WebService
{
[WebMethod]
publicstring HelloWorld()
{
return"Hello World";
}
[WebMethod]
publicvoid WS_ghilaidulieu(string sobaodanh, string malich, int sove, refint kt)
{
cls_VeTau BL_VeTau = new cls_VeTau();
BL_VeTau.GhiDuLieu(sobaodanh,malich,sove,ref kt);
} }
4.5 Xây Dựng WebForm Ứng Dụng
- WebForm có sử dụng 2 Webservice trên để dành cho Sinh viên tìm kiếm lịch tàu, đặt mua vé tàu trực tuyến
Kết quả tìm kiếm
KẾT LUẬN
Trong quá trình làm đề án, em đã được tìm hiểu, nghiên cứu về WebService. Để từ đó em đã đi vào thực tế về tìm hiểu, phân tích, thiết kế một hệ thống đặt vé tàu trực tuyến đơn giản ứng dụng công nghê Webservice. Rèn luyện thêm khả năng tự nghiên cứu, trình bày, có thêm kinh nghiệm và kiến thức để hổ trợ cho thực tập cuối khóa và sau này.
Tự đánh giá ưu nhược điểm của hệ thống Ưu điểm
- Giới thiệu tổng quan về Webservice
- Demo thực hiện đơn giản và dễ hiểu nhấn mạnh vào ứng dụng WebService
- Hệ thống đã đáp ứng được yêu cầu cơ bản của quá trình Nhược điểm
- Hệ thống chỉ mới dừng lại ở việc ứng dụng WebService, chưa phải là một hệ thống hoàn chỉnh với đầy đủ các chức năng.
Hướng phát triển
- Mở rộng phạm vi nghiên cứu.
TÀI LIỆU THAM KHẢO
-Th.S Nguyễn Thành Thủy, Bài Giảng Môn Lập Trình Web, Khoa Thống Kê - Tin Học, Trường Đại Học Kinh Tế Đà Nẵng.
- Dương Quang Thiện sách .NET Toàn Tập - Lập Trình Web Dùng ASP.NET Và C# - Tập 5
-Trung Tâm Tin Học – Đại Học Khoa Học Tự Nhiên Tp.HCM- Tài Liệu Hướng Dẫn Giảng Dạy -Lập trình ứng dụng web với ASP.NET
- Sách thiết kế Web – giáo viên Trần Phi Hảo- khoa khoa học máy tính – Trường CĐ CNTT Việt Hàn.
PHỤ LỤC
WebService có sử dụng các phương thức của lớp cls_VeTau
publicclass cls_VeTau {
public DataSet TimKiemLichTau(string gadi, string gaden, DateTime time, refint kt) //dataset
{
//khai bao cau lenh de hien thi thong bao kiem tra co tim thay lich trinh nhu yeu cau
string strSQL1 = "SELECT MaLich,TenTau, GaDi, GaDen, Time ,GiaVe, ChoTrong FROM " +
" (TAU INNER JOIN LICHTAU ON TAU.MaTau=LICHTAU.Matau) INNER JOIN TUYEN ON TUYEN.MaTuyen=LICHTAU.MaTuyen" +
" WHERE TUYEN.GaDi=@GaDi AND TUYEN.GaDen=@GaDen AND TIME >= @Time"; SqlParameter[] ThamSo1 = { new SqlParameter("GaDi", gadi),
new SqlParameter("GaDen", gaden), new SqlParameter("Time", time), };
DataSet ds = new DataSet();
ds = (DataSet)DAL.Select(strSQL1, ThamSo1); if (ds.Tables[0].Rows.Count == 0)
kt = 0;
else kt = ds.Tables[0].Rows.Count;
// tim kiem
string strSQL = "SELECT MaLich,TenTau, GaDi, GaDen, Time ,GiaVe, ChoTrong FROM " +
" (TAU INNER JOIN LICHTAU ON TAU.MaTau=LICHTAU.Matau) INNER JOIN TUYEN ON TUYEN.MaTuyen=LICHTAU.MaTuyen" +
" WHERE TUYEN.GaDi=@GaDi AND TUYEN.GaDen=@GaDen AND TIME >= @Time"; SqlParameter[] ThamSo = { new SqlParameter("GaDi", gadi),
new SqlParameter("GaDen", gaden), new SqlParameter("Time", time),
};
return DAL.Select(strSQL, ThamSo);
}
publicvoid GhiDuLieu(string sobaodanh, string malich, int sove, refint kt)// kt la kiem tra viec ghi du lieu thanh cong hay khong
{
string strSQL1 = "DatVeTau";// su dung 1 procedure da viet o trong SQL server
SqlParameter[] ThamSo1 ={ new SqlParameter("SoBaoDanh",sobaodanh), new SqlParameter("MaLich",malich),
new SqlParameter("SoVe",sove), new SqlParameter("kt",kt), };
DAL.Execute_Procedure(strSQL1, ref ThamSo1, ref kt); }
}
Trong Lớp cls_DataAccessLayer.cs
// Ham Execute su dung Procedure
publicvoid Execute_Procedure(string strSQL, ref SqlParameter[] ThamSo, refint kt) {
try //Bảy lỗi
{
Conn.Open();
SqlCommand command = new SqlCommand(strSQL, Conn);
command.CommandType = CommandType.StoredProcedure; // dung procedure
ThamSo[ThamSo.Length - 1].Direction = ParameterDirection.Output;// day la tham so nhan ket qua tra ve,them cai nay de truyen tham bien cho procedure
for (int i = 0; i < ThamSo.Length; i++) {
command.Parameters.Add(ThamSo[i]); }
command.ExecuteNonQuery();
kt = Convert.ToInt32(ThamSo[ThamSo.Length - 1].Value);// lay gia tri tra ve cua tham so
Conn.Close(); }
catch (Exception ex) //Tìm thấy lỗi
{
showErr(ex); }
}
PROCUDERE Trong SQLServer
ALTERPROCEDURE [dbo].[DatVeTau]
( @SoBaoDanh nchar(10), @MaLich nchar(10), @SoVe int, @kt intOUTPUT)
AS BEGIN
Declare @ConTrong int;
SELECT @ConTrong=ChoTrong FROM LICHTAU
WHERE MaLich=@MaLich;
IF(@SoVe <= @ConTrong)
BEGIN
INSERTINTO DATVE VALUES(@SoBaoDanh,@MaLich,@SoVe);
UPDATE LICHTAU SET ChoTrong=ChoTrong-@SoVe
WHERE MaLich=@MaLich;
SELECT @kt=1;
END
elseSELECT @kt=0;
END