Giáo trình Lập trình mạng: Phần 2

63 2 0
Giáo trình Lập trình mạng: Phần 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nối tiếp phần 1 của Giáo trình Lập trình mạng phần 2 giới thiệu đến các bạn những nội dung: Xây dựng ứng dụng mạng, xây dựng ứng dụng nhiều lớp. Hy vọng, đây là tài liệu tham khảo hữu ích dành cho các bạn.

CHƯƠNG 3: XÂY DỰNG ỨNG DỤNG MẠNG 3.1 Giao thức ICMP Giới thiệu giao thức ICMP (Internetwork Control Message Protocol) - Giao thức ICMP hoạt ñộng layer - Internetwork mơ hình TCP/IP layer - Network mơ hình OSI Cho phép kiểm tra xác định lỗi Layer Internetwork mơ hình TCP/IP cách định nghĩa loại thơng điệp sử dụng ñể xác ñịnh xem mạng truyền gói tin hay khơng Trong thực tế, ICMP cần thành phần gói tin IP để hoạt động Cấu trúc gói tin IP ICMP + Type: query hay lỗi + Code: Xác ñịnh ñây loại query hay thơng điệp lỗi + Checksum: Kiểm tra sửa lỗi cho liệu ICMP + Message: Tuỳ thuộc vào Type Code 3.1.1 Sử dụng Raw Socket Gói tin ICMP khơng sử dụng TCP UDP nên khơng thể sử dụng lớp hỗ trợ TcpClient hay UdpClient mà phải sử dụng Raw Socket Muốn tạo Raw Socket tạo Socket bạn sử dụng SocketType.Raw, giao thức ICMP Tạo Raw Socket sau Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); Raw Socket Format Value Description Ggp Gateway-to-Gateway Protocol Icmp Internet Control Message Protocol 55 Idp IDP Protocol Igmp Internet Group Management Protocol IP A raw IP packet Ipx Novell IPX Protocol ND Net Disk Protocol Pup Xerox PARC Universal Protocol (PUP) Raw A raw IP packet Spx Novell SPX Protocol SpxII Novell SPX Version Protocol Unknown An unknown protocol Unspecified An unspecified protocol Gửi gói liệu Raw ICMP giao thức không hướng kết nối Sử dụng phương thức SendTo() lớp Socket ñể gửi Cổng giao thức ICMP không quan trọng IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.2"), 0); sock.SendTo(packet, iep); Nhận gói liệu Raw Sử dụng phương thức ReceiveForm cửa lớp Socket Dữ liệu nhận gói tin IP phải tách để lấy gói tin ICMP Raw Socket khơng tự động ñịnh dạng gói tin ICMP cho Chúng ta phải tự làm Data Variable Size Type Type byte Byte Code byte Byte Checksum bytes Unsigned 16-bit integer multibyte Byte array Message ðịnh nghĩa lớp phương thức khởi tạo mặc ñịnh class ICMP { public byte Type; public byte Code; public UInt16 Checksum; public int Messagesize; public byte[] Message = new byte[1024]; public ICMP() { } } Tạo gói tin ICMP ICMP packet = new ICMP(); 56 packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; public ICMP(byte[] data, int size) { Type = data[20]; Code = data[21]; Checksum = BitConverter.ToUInt16(data, 22); MessageSize = size - 24; Buffer.BlockCopy(data, 24, Message, 0, MessageSize); } public byte[] getBytes() { byte[] data = new byte[MessageSize + 9]; Buffer.BlockCopy(BitConverter.GetBytes(Type), 0, data, 0, 1); Buffer.BlockCopy(BitConverter.GetBytes(Code), 0, data, 1, 1); Buffer.BlockCopy(BitConverter.GetBytes(Checksum), 0, data, 2, 2); Buffer.BlockCopy(Message, 0, data, 4, MessageSize); return data; } public UInt16 getChecksum() { UInt32 chcksm = 0; byte[] data = getBytes(); int packetsize = MessageSize + 8; int index = 0; while (index < packetsize) { chcksm += Convert.ToUInt32(BitConverter.ToUInt16(data, index)); index += 2; } chcksm = (chcksm >> 16) + (chcksm & 0xffff); chcksm += (chcksm >> 16); return (UInt16)(~chcksm); } 3.1.2 Sử dụng giao thức ICMP Raw Socket để xây dựng chương trình Ping 57 class Program { static void Main(string[] args) { byte[] data = new byte[1024]; int recv; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPEndPoint iep = new IPEndPoint(IPAddress.Parse(argv[0]), 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes((short)1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getChecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); } catch (SocketException) { Console.WriteLine("No response from remote host"); return; } ICMP response = new ICMP(data, recv); Console.WriteLine("response from: {0}", ep.ToString()); Console.WriteLine(" Type {0}", response.Type); Console.WriteLine(" Code: {0}", response.Code); int Identifier = BitConverter.ToInt16(response.Message, 0); 58 int Sequence = BitConverter.ToInt16(response.Message, 2); Console.WriteLine(" Identifier: {0}", Identifier); Console.WriteLine(" Sequence: {0}", Sequence); string stringData = Encoding.ASCII.GetString(response.Message, 4, response.MessageSize - 4); Console.WriteLine(" data: {0}", stringData); host.Close(); } } 3.1.3 Sử dụng giao thức ICMP Raw Socket để xây dựng chương trình TraceRoute class TraceRoute { public static void Main(string[] argv) { byte[] data = new byte[1024]; int recv, timestart, timestop; Socket host = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.Icmp); IPHostEntry iphe = Dns.Resolve(argv[0]); IPEndPoint iep = new IPEndPoint(iphe.AddressList[0], 0); EndPoint ep = (EndPoint)iep; ICMP packet = new ICMP(); packet.Type = 0x08; packet.Code = 0x00; packet.Checksum = 0; Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 0, 2); Buffer.BlockCopy(BitConverter.GetBytes(1), 0, packet.Message, 2, 2); data = Encoding.ASCII.GetBytes("test packet"); Buffer.BlockCopy(data, 0, packet.Message, 4, data.Length); packet.MessageSize = data.Length + 4; int packetsize = packet.MessageSize + 4; UInt16 chcksum = packet.getCchecksum(); packet.Checksum = chcksum; host.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 3000); int badcount = 0; for (int i = 1; i < 50; i++) { host.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.IpTimeToLive, i); timestart = Environment.TickCount; host.SendTo(packet.getBytes(), packetsize, SocketFlags.None, iep); try { data = new byte[1024]; recv = host.ReceiveFrom(data, ref ep); timestop = Environment.TickCount; ICMP response = new ICMP(data, recv); if (response.Type == 11) Console.WriteLine("hop {0}: response from {1}, {2}ms", i, ep.ToString(), timestop - timestart); if (response.Type == 0) { Console.WriteLine("{0} reached in {1} hops, {2}ms.", ep.ToString(), i, timestop - timestart); break; 59 } badcount = 0; } catch (SocketException) { Console.WriteLine("hop {0}: No response from remote host", i); badcount++; if (badcount == 5) { Console.WriteLine("Unable to contact remote host"); break; } } } host.Close(); } } 3.2 Giao thức SMTP, POP3 3.2.1 Cơ hệ thống Mail giao thức SMTP, POP3 60 * Giao thức SMTP Một số lệnh giao thức SMTP: Lệnh HELO MAIL RCPT DATA RSET VRFY NOOP QUIT SEND Mơ tả Hello Sử dụng để xác ñịnh người gửi ñiện Lệnh này ñi kèm với tên host gửi ñiện Trong ESTMP (extended protocol), lệnh EHLO Khởi tạo giao dịch gửi thư Nó kết hợp "from" để xác định người gửi thư Xác định người nhận thư Thơng báo bất ñầu nội dung thực ñiện (phần thân thư) Dữ liệu ñược mã thành dạng mã 128-bit ASCII kết thúc với dịng ñơn chứa dấu chấm (.) Huỷ bỏ giao dịch thư Sử dụng để xác thực người nhận thư Nó lệnh "no operation" xác định khơng thực hành động Thốt khỏi tiến trình để kết thúc Cho host nhận biết thư cịn phải gửi đến đầu cuối khác Một số lệnh khơng u cầu phải có xác ñịnh RFC 821 SOML Send or mail Báo với host nhận thư thư phải gửi ñến ñấu cuối khác hộp thư SAML Send and mail Nói với host nhận ñiện phải gửi tới người dùng ñầu cuối hộp thư EXPN Sử dụng mở rộng cho mailing list HELP Yêu cầu thông tin giúp ñỡ từ ñầu nhận thư TURN Yêu cầu ñể host nhận giữ vai trò host gửi thư - Mã trạng thái SMTP Khi MTA gửi lệnh SMTP tới MTA nhận MTA nhận trả lời với mã trạng thái ñể cho người gửi biết có việc xẩy đầu nhận Và ñây bảng mã trạng thái SMTP theo tiêu chuẩn RFC 821 Mức ñộ trạng thái ñược 61 xác ñịnh số ñầu tiên mã (5xx lỗi nặng, 4xx lỗi tạm thời, 1xx–3xx hoạt động bình thường) - Một số mã trạng thái SMTP 211 Tình trạng hệ thống, hay reply giúp ñỡ hệ thống 214 Thông ñiệp giúp ñỡ 220 dịch vụ sẳn sàng 221 dịch vụ đóng kênh giao chuyển 250 Hành động mail u cầu OK, hồn thành 251 User khơng cục bộ; hướng đến 354 Khởi ñộng việc nhập mail; kết thúc với 421 dịch vụ khơng sử dụng được, đóng kênh giao chuyển 450 Khơng lấy hành động mail u cầu; mailbox khơng hiệu lực 451 Khơng nhận hành động ñược yêu cầu; lưu trữ hệ thống không ñủ 500 Lỗi cú pháp; không chấp nhận lệnh 501 Lỗi cú pháp tham số hay ñối số 502 Lệnh khơng cung cấp 503 Dịng lệnh sai 504 Tham số dịng lệnh khơng cung cấp 550 Khơng nhận hành động u cầu ; mailbox khơng hiệu lực [như mailbox khơng tìm thấy hay khơng truy cập được] 551 User khơng cục bộ; vui lịng thử 552 Bỏ qua hành ñộng mà mail yêu cầu, vượt q định lưu trữ 554 Khơng nhận hành động ñược yêu cầu; tên mailbox không ñược chấp nhận [như sai cú pháp mailbox] giao chuyển sai - ðịnh dạng thư thơng thường khơng có phần đính kèm sau: * Giao thức POP3 Giao thức dùng ñể lấy thư, POP3 Server lắng nghe cổng 110, mô tả RFC 1939 62 - Một số lệnh POP3 USER Xác ñịnh username PASS Xác ñịnh password STAT Yêu cầu trạng thái hộp thư số lượng thư ñộ lớn thư LIST Hiện danh sách thư RETR Nhận thư DELE Xoá thư xác định NOOP Khơng làm RSET Khơi phục lại thư xố (rollback) QUIT Thực việc thay đổi 3.2.2 Cài đặt SMTP, POP3 Client/Server Viết chương trình gửi Mail đơn giản theo giao thức SMTP using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.IO; class Program { static void Main(string[] args) { string nguoigui, nguoinhan, tieude,body; string diachimaychu; int portmaychu; Console.Write("Nhap di chu SMTP Server:"); diachimaychu = Console.ReadLine(); Console.Write("Nhap cong cua may chu:"); portmaychu = int.Parse(Console.ReadLine()); Console.Write("Nhap dia chi nguoi gui:"); nguoigui = Console.ReadLine(); Console.Write("Nhap dia chi nguoi nhan:"); nguoinhan = Console.ReadLine(); Console.Write("Nhap tieu de buc thu:"); tieude = Console.ReadLine(); Console.Write("Nhap noi dung buc thu:"); body= Console.ReadLine(); //Tao Endpoit cua may chu IPEndPoint iep = new IPEndPoint(IPAddress.Parse(diachimaychu), portmaychu); TcpClient client = new TcpClient(); client.Connect(iep); string Data = "Helo"; StreamReader sr = new StreamReader(client.GetStream()); StreamWriter sw = new StreamWriter(client.GetStream()); sw.WriteLine(Data); sw.Flush(); //Doc thong bao tu Server gui ve va xu ly neu can thiet Console.WriteLine(sr.ReadLine()); 63 //Gui dia chi nguyoi gui Data = "MAIL FROM: "; sw.WriteLine(Data); sw.Flush(); //Doc thong bao tu Server gui ve va xu ly neu can thiet Console.WriteLine(sr.ReadLine()); //Gui dia chi nguyoi gui Data = "RCPT TO: "; sw.WriteLine(Data); sw.Flush(); //Doc thong bao tu Server gui ve va xu ly neu can thiet Console.WriteLine(sr.ReadLine()); //Bat dau gui noi dung buc thu Data = "Data"; sw.WriteLine(Data); sw.Flush(); //Doc thong bao tu Server gui ve va xu ly neu can thiet Console.WriteLine(sr.ReadLine()); //Gui noi dung buc thu Data = "SUBJECT:" + tieude + "\r\n" + body + "\r\n" + "." + "\r\n"; sw.WriteLine(Data); sw.Flush(); //Doc thong bao tu Server gui ve va xu ly neu can thiet Console.WriteLine(sr.ReadLine()); //Ngat ket noi Data = "QUIT"; sw.WriteLine(Data); sw.Flush(); //Doc thong bao tu Server gui ve va xu ly neu can thiet Console.WriteLine(sr.ReadLine()); sr.Close(); sw.Close(); client.Close(); Console.ReadLine(); } } 64 host IIS Web Services cho phép ứng dụng giao tiếp với mà không phụ thuộc platform, ngơn ngữ lập trình, … Tuy nhiên Web Services mơi trường “stateless”, có nghĩa khơng lưu lại trạng thái lần gọi trước khơng biết phía client thực request Client server Web Services trao đổi với thơng điệp SOAP Những điều sau điểm khác NET Remoting Web Serices, chúng nhân tố để ta chọn lựa cơng nghệ này: • ASP.NET Web Services truy xuất qua HTTP cịn NET Remoting dùng nhiều giao thức khác TCP, HTTP • Web Services mơi trường stateless Khi có request từ phía client, có object tạo để thực request server Cịn NET Remoting lại hỗ trợ nhiều lựa chọn state management thực nhiều request từ client, đồng thời có hỗ trợ callbacks • Web Services serialize ñối tượng thành XML bên SOAP message truyền tải thơng tin thành phần miễn chuyển thành XML Cịn NET Remoting tùy giao thức định dạng message mà truyền thơng tin Ngoài theo giới thiệu NET Remoting có cho phép đối tượng truyền vào theo kiểu tham chiếu(reference) tham trị (value) • Web services hoạt động platform môi trường khác NET Remoting yêu cầu phía clients phải NET application Channels - Trong kĩ thuật NET Remoting Channel hiểu kênh ñể giao tiếp client server Một object từ client thơng qua Channel để giao tiếp với object phía server, Channel truyền tải message từ hai phía Như giới thiệu phía có hai channel TcpChannel HttpChannel tương ứng với giao thức TCP HTTP Ngoài ra, TcpChannel HttpChannel ñều có khả extend thành Custom Channel bạn Làm để tạo Object Remote ñược NET Remoting? - Một Object remote ñược object thơng thường phải inherit từ MarshalByRefObject ðoạn code sample hình 4.2 ví dụ ñơn giản Remotable Object ðối tượng SampleObject hình có số method đơn giản trả phép tính tổng, hiệu, tích, thương hai số nguyên Giá trị trả hàm kiểu số nguyên, kiểu built-in NET framework Nếu bạn muốn trả kiểu liệu bạn tự ñịnh nghĩa, instance class bạn định nghĩa lớp bạn phải ñược khai báo với attribute Serializable using System; public class SampleObject: MarshalByRefObject { public int Add(int a, int b) { int c = a + b; 103 return c; } public int Subtract(int a, int b) { int c = a - b; return c; } public int Multiply(int a, int b) { int c = a * b; return c; } public int Divide(int a, int b) { int c; if (b != 0) c = a / b; else c = 0; return c; } } Hình 4.2: Remotable Object Sample Tạo chương trình Server để host Remotable Object - Kế tiếp, cần tạo chương trình server để lắng nghe request từ phía client Trong ví dụ sử dụng TCP/IP channel ðầu tiên tạo instance channel đăng kí port tương ứng cho Khi có Request từ phía client, server nhận request ñó Remote Object thực thi Request Trong NET Remoting, có hai chế để tạo instance Remote Object từ thực thi request: Singleton Singlecall Tùy vào mục đích sử dụng, nhu cầu chương trình mà server bạn khai báo theo chế WellKnownObjectMode.SingleCall, hay WellKnownObjectMode.Singleton Khi khai báo Singleton, Remote Object ñược sinh ra, thực thi request, reply lại phía client sau đó, object lưu lại khơng bị hủy ðến process chạy chương trình server kết thúc instance bị trình hốt rác Garbage Collector hốt ñi Và ngược lại, khai báo SingleCall, Remote Object ñược khởi tạo hủy ñi ñối với lần nhận request từ phía client, chế tương tự mơ hình NET Web Service truyền thống - Nếu bạn muốn sử dụng NET Remoting IIS khơng cần tạo chương trình server Và tất nhiên, IIS hỗ trợ HttpChannel Nếu host NET Remoting bên IIS bạn sử dụng ñược chế Authentication IIS, ngược lại làm chương trình server để host bạn phải cài đặt chế Authentication riêng ðể host Remote Object bên IIS, trước tiên phải tạo Virtual Directory cho application, sau đặt đoạn code đăng kí service bên event Application_Start (file global.asax) 104 - Trong ví dụ này, không sử dụng IIS mà tạo console application Có nhiều lựa chọn khơng sử dụng IIS, ta sử dụng console application, Win form application thực tế, người ta sử dụng Windows Service để làm Cịn Console application hay Winform Application thường dùng để minh họa Trong ví dụ này, sử dụng port 9999 cho may mắn Có thể chương trình máy bạn ñã sử dụng port này, bị bạn phải chọn port khác Và sau cùng, ñể kiểm tra xem máy bạn ñang lắng nghe port (port bị sử dụng) ta dùng lệnh “netstat –a” command prompt - Còn bây giờ, xem console application project với class tên SampleSerrver Trong project tơi thêm reference tới System.Runtime.Remoting vào project để chạy ñược using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Tcp; public class Server { public static int Main() { TcpChannel chan = new TcpChannel(9999); ChannelServices.RegisterChannel(chan, false); RemotingConfiguration.RegisterWellKnownServiceType(typeof(SampleObject) , "SampleNetRemoting", WellKnownObjectMode.SingleCall); Console.WriteLine("Hit to exit "); Console.ReadLine(); } } Hình 3: Sample Server host Remotable Object Tạo chương trình client ñể sử dụng Remote Object - Chương trình client ví dụ đơn giản, connect vào server, tạo instance Remote Object excute method tính tổng, hiệu, tích, thương - Các bạn lưu ý chương trình client chương trình server ñều phải reference tới class SampleObject Client gọi method instance SampleObject, server thực thi xử lý khơng phải phía client using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.Runtime.Remoting.Channels.Http; public class Client { 105 public static int Main (string[] argv) { TcpChannel chan = new TcpChannel(); ChannelServices.RegisterChannel(chan, false); SampleObject obj = (SampleObject)Activator.GetObject( typeof(SampleObject), "tcp://localhost:9999/SampleNetRemoting"); if (obj == null) System.Console.WriteLine("Could not locate server"); else { int a = Convert.ToInt32(argv[0]); int b = Convert.ToInt32(argv[1]); int c = obj.Add(a, b); Console.WriteLine("a + b = {0}", c); c = obj.Subtract(a, b); Console.WriteLine("a - b = {0}", c); c = obj.Multiply(a, b); Console.WriteLine("a * b = {0}", c); c = obj.Divide(a, b); Console.WriteLine("a / b = {0}", c); } Console.ReadKey(); } } Hình 4: Sample Client Application Test thử chương trình - Trước tiên chạy chương trình server, bạn thấy message “Press the enter key to exit” cửa sổ console Như server bạn ñang lắng nghe port 9999 Bây bạn chạy chương trình client nhìn thấy kết trả hình Bạn chạy nhiều client để request đến server khơng thể chạy nhiều server Bạn copy chương trình server sang máy bạn nhờ chạy thử, cịn bạn sửa lại chương trình client, sửa “localhost” thành IP máy bạn chạy thử để thấy kết Tóm tắt: - Ví dụ sử dụng code C# để khai báo cấu hình cho server client nhiên NET Remoting cho phép ta cấu hình trước file config (App.config) Các bạn tham khảo số resource phía để biết cách làm - NET Remoting kĩ thuật tiện lợi cho chương trình dạng Distributed Computing Cách sử dụng phức tạp Web Service nhiên bạn 106 muốn tăng performance NET Remoting với Singleton TCP channel lựa chọn tốt - Với ñời NET Framework 3.x, Microsoft ñã giới thiệu tảng cho kĩ thuật RPC, WCF mạnh NET Remoting nhiều 4.2.2 Khai báo, cài ñặt ñăng ký giao diện từ xa ðể cho chương trình có tính khả chuyển cao thay người ta xây dựng lớp Remote Object ví dụ khai báo giao diện lớp Remote Object chương trình phía Server ta cài đặt giao diện ñăng ký giao diện từ xa Như ñể triển khai hệ thống Remoting ta có chương trình: Giao diện Remote Object, chương trình Server triển khai giao diện đăng ký giao diện từ xa, chương trình Client triệu gọi phương thức từ xa - Khai báo giao diện từ xa - Cài ñặt ñăng ký giao diện từ xa 4.2.3 Triệu gọi phương thức từ xa - Chương trình phía Client triệu gọi phương thức ñược cung cấp giao diện tử xa ñã ñược ñăng ký cung cấp Server 4.3 Web Services 4.3.1 Giới thiệu Web Services Web Service gì? Web service Modul chương trình cung cấp chức ứng dụng cho phép triệu gọi truy cập từ xa thông qua Internet Web service sử dụng chuẩn Internet XML HTTP Việc sử dụng Web service phụ thuộc nhiều vào chấp nhận XML, ngôn ngữ mô tả liệu dùng ñể truyền tải liệu thông qua Web Bất kỳ Web service sử dụng, ứng dụng cục truy cập từ xa qua Internet nhiều ứng dụng Do có khả truy cập qua giao diện chuẩn mà Web service cho phép nhiều hệ thống khác làm việc với tiến trình Web Vai trị Web service Web service đời mở hướng cho việc phát triển ứng dụng Internet Web services tạm dịch dịch vụ web Cơng nghệ web services đời cách mạng hóa cách thức hoạt động dịch vụ B2B B2C Web services kết hợp sử dụng nhiều công nghệ khác cho phép hai ứng dụng ngơn ngữ, độc lập hệ điều hành trao đổi với thơng qua mơi trường mạng Internet Tuy nhiên cơng nghệ sử dụng không thiết phải công nghệ ðây ñiểm khác biệt web services so với cơng nghệ khác, khả kết hợp cơng nghệ có XML, SOAP, WSDL, UDDI ñể tạo service, ñặc ñiểm làm bật vai trò web services 107 Web Service ñược thiết kế nhằm cung cấp chế cho phép chương trình giao tiếp với qua Internet (sử dụng giao thức Internet HTTP GET, HTP POST SOAP) ðặc ñiểm Web service - Web service cho phép client server tương tác ñược với môi trường khác - Web Service có dạng mở dựa vào tiêu chuẩn XML HTTP tảng kỹ thuật cho web service Phần lớn kỹ thuật web service ñược xây dựng dự án nguồn mở Bởi chúng ñộc lập vận hành ñược với - Web Service linh động: Vì với UDDI WSDL, việc mơ tả phát triển web service tự động hố - Web service ñược xây dựng tảng công nghệ ñã ñược chấp nhận - Web service có dạng modul - Web service cơng bố (publish) gọi thực qua mạng Ngày web service ñược sử dụng nhiều lĩnh vực khác sống như: - Dịch vụ chọn lọc phân loại tin tức: hệ thống thư viện kết nối đến web portal để tìm kiếm thơng tin từ nhà xuất có chứa khố muốn tìm - Dịch vụ hiển thị danh sách đĩa nhạc dành cho công ty thu - Ứng dụng đại lý du lịch có nhiều giá vé du lịch khác có chọn lựa phục vụ nhiều hãng hàng khơng - Bảng tính tốn sách bảo hiểm dùng công nghệ Excel/COM với giao diện web - Thông tin thương mại bao gồm nhiều nội dung, nhiều mục tin như: dự báo thời tiết, thông tin sức khoẻ, lịch bay, tỷ giá cổ phiếu,… - Những giao dịch trục tuyến cho B2B B2C như: ñặt vé máy bay, làm giao kèo thuê xe - Hệ thống thơng tin dùng java để tính tốn tỷ giá chuyển ñổi loại tiền tệ Hệ thống ñược ứng dụng khác dùng web service Kiến trúc Web service Kiến trúc Web service bao gồm tầng sau: 108 Hình 1: Kiến trúc Web service Trong bao gồm tầng sau: - Tầng vận chuyển: có nhiệm vụ truyền thơng điệp ứng dụng mạng, bao gồm giao thức HTTP, SMTP, FTP, JSM gần ñây giao - thức thay ñổi khổi mở rộng (Blocks Extensible Exchange Protocol- BEEP) Tầng giao thức tương tác dịch vụ ( Service Communication Protocol) với công - nghệ chuẩn SOAP SOAP giao thức nằm tầng vận chuyển tầng mô tả thông tin dịch vụ, SOAP cho phép người dùng triệu gọi service từ xa thông qua message XML Tầng mô tả dịch vụ (Service Description) với công nghệ chuẩn WSDL XML WSDL ngôn ngữ mô tả giao tiếp thực thi dựa XML Web service sử dụng ngơn ngữ WSDL để truyền tham số loại liệu cho - thao tác, chức mà web service cung cấp Tầng dịch vụ ( Service): cung cấp chức service - Tầng ñăng ký dịch vụ (Service Registry) với công nghệ chuẩn UDDI UDDI dùng cho người dùng SOAP server, cho phép đăng ký dịch vụ để người dùng gọi thực service từ xa qua mạng, hay nói cách khác - service cần phải ñược ñăng ký ñể cho phép client gọi thực Bên cạnh service có tính an tồn, tồn vẹn bảo mật thông tin kiến trúc web service có thêm tầng Policy, Security, Transaction, Management giúp tăng cường tính bảo mật, an tồn tồn vẹn thông tin sử dụng service 4.3.2 Giao thức SOAP 109 SOAP chữ viết tắt cụm từ “Simple Object Access Protocol – Giao thức truy cập ñối tượng ñơn giản”, với xem xét thì, SOAP khơng cịn từ viết tắt Chuẩn SOAP ghi nhận XML ñược thể bên tài liệu SOAP, làm nội dung thơng điệp truyền tải, làm thơng điệp xử lý hai phía gởi nhận SOAP cung cấp tập từ vựng chuẩn Các thuật ngữ: Như bẩt kỳ công nghệ nào, SOAP có tập thuật ngữ riêng Có nhiều thuật ngữ sử dụng thường xun để mơ tả khía cạnh khác chuẩn SOAP Nhiều lập trình viên dùng thuật ngữ mà khơng thật hiểu ý nghĩa ðể hiểu thật khái niệm địi hỏi phải tốn thời gian ñể hiểu ý nghĩa thuật ngữ làm ñể áp dụng cho chuẩn SOAP Web Services thực thụ Chú ý: Chuẩn SOAP không chuẩn XML mà chuẩn cịn bao gồm thơng điệp SOAP có hành vi nào, phương tiện vận chuyển khác nhau, cách mà lỗi ñược xử lý Sự truyền tải liệu SOAP Binding Thuật ngữ mô tả làm thơng điệp SOAP tương tác với giao thức vận chuyển HTTP, SMTP hay FTP ñể di chuyển Internet ðiều quan trọng SOAP di chuyển giao thức chuẩn ñể liên lạc với sản phẩm Web Services khác Trước SOAP, nhiều người phát triển ñã tạo phương pháp riêng họ ñể chuyển tải tài liệu XML mạng Các cách hoạt ñộng tốt phạm vi nhóm cụ thể Tuy nhiên bạn cần làm việc với nhóm khác hay bên ngồi cơng ty điều trở nên khó khăn phải huấn luyện thay đổi để làm việc với việc truyền tải tài liệu XML mà họ ñang sử dụng Bằng cách sử dụng tài liệu XML chuẩn giao thức chuẩn, công việc cần làm cộng tác với ñược giảm thiểu tối đa SOAP Message Exchang Pattern (MEP) Thuật ngữ mơ tả làm mà tài liệu SOAP trao đổi phía máy khách chủ Thơng điệp SOAP sở hữu liên kết, HTTP, để truyền Internet Việc nói chuyện máy khách chủ, ñây nút, xác ñịnh hành động mà hai phía thực Nhắc lại SOAP XML đóng gói RPC Vì thế, MEP hoàn toàn yêu cầu phản hồi máy khách chủ (hay nút khác) Như có nhu cầu liên lạc nút việc ñược thực nhiều yêu cầu phản hồi để hồn tất việc truyền thơng điệp Cách khác hẳn với cơng nghệ đối tượng từ xa khác CORBA, cơng nghệ thực kết nối SOAP Application Một ứng dụng SOAP ñơn giản ứng dụng dùng SOAP theo vài cách khác Vài ứng dụng hoàn toàn dựa chuẩn SOAP, Web Services cổ phiếu, dùng chuẩn SOAP ñể nhận mã cập nhật phần mềm Chú ý ứng dụng tạo, sử dụng nút trung gian Web Services SOAP Node Trách nhiệm nút bao gồm gởi, nhận, xử lý truyền tải lại thơng điệp SOAP Một nút phần nhỏ phần mềm, xử lý tài liệu SOAP phụ thuộc vào 110 vai trị Bên cạnh việc truyền liệu, nút có trách nhiệm đảm bảo thơng tin XML tài liệu SOAP phải ñúng ngữ pháp theo chuẩn SOAP SOAP Role Một vai trị SOAP định nghĩa nút cụ thể hoạt động Nó nút gởi, nhận nút trung gian SOAP Sender Nút gởi nút gởi yêu cầu SOAP Nếu bạn nghĩ ñến ví dụ ứng dụng khách chủ ứng dụng khách thực u cầu, gởi thơng điệp tới ứng dụng chủ để u cầu vài thơng tin SOAP Receiver Ngược lại với SOAP sender nút nhận SOAP Intermediary Một nút trung gian xem thơng điệp SOAP tương tác vài phần thơng tin thơng điệp, chuyển đến vị trí thơng điệp Một nút trung gian thường hoạt ñộng router Một router xem xét thông tin gói tin chuyển mạng, tìm điểm gói tin chuyển gói tin đển Message Path Một thơng điệp SOAP di chuyển từ phía bên gởi đến phía bên nhận thơng điệp thơng qua nhiều nút trung gian Tuyến đường thơng điệp ñược gọi Message Path Initial SOAP Sender Nút gởi yêu cầu SOAP ñầu tiên nút gởi SOAP ban ñầu SOAP Feature Một ñặc ñiểm SOAP phần chức phần mềm hỗ trợ chức SOAP Các thuật ngữ liên quan ñến XML Chuẩn SOAP ñịnh nghĩa tập nhỏ phần tử XML ñể ñóng gói liệu ñược truyền nút Thật có vài phần tử phần thân thơng điệp khác phụ thuộc vào cài ñặt Sự uyển chuyển ñược cho phép chuẩn SOAP SOAP Message ðây tài liệu XML ñược truyền nút SOAP gởi nhận Một nút gởi nút khách tạo tài liệu XML chứa thơng tin mà phía bên khách cần từ phía chủ Một tài liệu truyền, phía bên chủ phân giải thơng tin tài liệu để truy xuất giá trị khác tạo thơng điệp SOAP ñể phản hồi SOAP Envelope ðây phần tử gốc tài liệu SOAP XML Tài liệu SOAP chứa nhiều định nghĩa khơng gian tên (namespace) phần tử liên quan tới thơng điệp SOAP có ENV: tiếp ñầu ngữ SOAP Header 111 Phần ñầu thơng điệp SOAP chứa khối thơng tin ñầu tài liệu XML ñể ñịnh tuyến xử lý thơng điệp SOAP Dữ liệu tách rời khỏi phần thân tài liệu có chứa thơng tin liên quan ñến ñối tượng ñược gọi SOAP Header Block Phần ñầu SOAP chứa nhiều phần giới hạn nhiều khối thơng tin có khối thơng tin phần đầu Những khối thơng tin phần đầu chứa thơng tin nút trung gian nút cần biết nút để thơng điệp gởi ñến SOAP Body Phần thân SOAP thật chứa thơng tin đối tượng để xử lý thơng tin Phần thân sau ñược phân tách trở thành đối tượng ðối tượng xử lý thơng tin kết ñược ñặt phần thân tài liệu trả SOAP Fault ðây phần thông tin SOAP chứa thơng tin đến lỗi xảy nút SOAP 4.3.3 Xây dựng Web Services - Tạo Web Services project - Tạo Web Method 112 - Chạy thử Web Services danh sách hàm ñược liệt kê - Chọn hàm Add 113 - Sau nhập tham số vào, nhấn Invoke Kết xuất 4.3.4 Triệu gọi Web Services từ ứng dụng NET, Java ngôn ngữ khác - Sau xây dựng Web Server song ta triệu gọi từ ứng dụng khác - Tạo Window Form 114 - Add Web Reference - Tạo hình: 115 - Viết hàm xử lý nút nhấn: - Chạy thử ứng dụng ta có kết quả: 4.4 Thảo luận ứng dụng phân tán 4.5 Bài tập áp dụng Viết chương trình Chat sử dụng cơng nghệ Web Services Viết chương trình Calculator cơng nghệ Web Services Viết chường trình quản lý FileManager công nghệ Web Services 116 TÀI LIỆU THAM KHẢO Richard Blum, C# Network Programming, 2003 Fiach Reid, Network programming in NET with C# and VB.NET, Digital Press, 2003 Bài giảng “Nhập môn Công nghệ phần mềm”, ðại học KHTN Bài giảng “Xây dựng phần mềm hướng ñối tượng”, ðại học KHTN Bài giảng “Lập trình truyền thơng”, ðại học Cần Thơ Bài giảng “Công nghệ NET”, Khoa CNTT – ðại học SPKT Hưng Yên Bài giảng “Java Nâng cao”, Khoa CNTT- ðại học SPKT Hưng Yên Các ví dụ Website: www.java2s.com 117 ... sử dụng, từ cổng 22 23 Sau phía Server PI hướng cho phía Server-DTP lắng nghe cổng 22 23 Phía User-PI hướng cho phía UserDTP tạo phiên kết nối từ cổng 17 42 phía client tới cổng 22 23 phía server Sau... thống, hay reply giúp ñỡ hệ thống 21 4 Thơng điệp giúp đỡ 22 0 dịch vụ sẳn sàng 22 1 dịch vụ đóng kênh giao chuyển 25 0 Hành động mail u cầu OK, hồn thành 25 1 User khơng cục bộ; hướng... lệnh FTP máy clients Bộ phần mềm FTP ñược cài ñặt thiết bị ñược gọi tiến trình Phần mềm FTP cài đặt máy Server ñược gọi tiến trình Server-FTP, phần máy client gọi tiến trình User-FTP Kênh điều

Ngày đăng: 09/05/2021, 14:58

Tài liệu cùng người dùng

Tài liệu liên quan