HÁLÓZAT SOAP Hagyományos WCF/ASMX webszervizek
REST A webszerviz vezérlése URI-ken keresztül HÁLÓZAT REST A webszerviz vezérlése URI-ken keresztül HttpGet, HttpPut, HttpDelete, HttpPost Bookmarks GetUserPublicBookmarks(string username, string tag) http://contoso.com/bookmarkservice/{username}?tag={tag}
OData Adatok lekérdezése REST „stílusban” HÁLÓZAT OData Adatok lekérdezése REST „stílusban” Az adatok tipikusan XML formában (pl JSON vagy ATOM) vannak formázva
HÁLÓZAT WebClient Viszonylag magas szintű eszköz HTTP alapú kommunikáció kezelésére
WebClient HÁLÓZAT WebClient webClient = new WebClient(); // String letöltése webClient.DownloadProgressChanged += (sender, args) => { var bytesRecieved = args.BytesReceived; var totalBytesToRecieve = args.TotalBytesToReceive; var percentage = args.ProgressPercentage; }; webClient.DownloadStringCompleted += (sender, args) => var downloadedString = args.Result; webClient.DownloadStringAsync(new Uri("http://wp7.devportal.hu/"));
HÁLÓZAT HttpWebRequest Alacsony szintű eszköz HTTP alapú kommunikáció kezelésére Hozzáférés a headerekhez
HttpWebRequest HÁLÓZAT HttpWebRequest request = HttpWebRequest.Create("http://wp7.devportal.hu") as HttpWebRequest; request.BeginGetResponse((iar) => { using (var responseStream = request.EndGetResponse(iar).GetResponseStream()) byte[] bytes = new byte[(int)responseStream.Length]; responseStream.Read(bytes, 0, (int)responseStream.Length); string responseString = Encoding.UTF8.GetString(bytes, 0, bytes.Length); } }, null);
HÁLÓZAT Sockets Igazán alacsony szintű eszköz TCP vagy UDP alapú kommunikáció kezelésére TCP Kapcsolat orientált Megbízható kommunikáció UDP Kapcsolatmentes Nem megbízható
HÁLÓZAT Sockets // Osztályszintű (cached) Socket objektum. Ezt fogjuk minden hívásnál használni Socket _socket = null; // Jelzőobjektum az aszinkron műveletek befejezésének jelzésére static ManualResetEvent _clientDone = new ManualResetEvent(false); // Timeout időtartam miliszekundomban const int TIMEOUT_MILLISECONDS = 5000; // Maximálus buffer méret az üzeneteknek const int MAX_BUFFER_SIZE = 2048;
Sockets HÁLÓZAT public string Connect(string hostName, int portNumber) { string result = string.Empty; DnsEndPoint hostEntry = new DnsEndPoint(hostName, portNumber); _socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); socketEventArg.RemoteEndPoint = hostEntry; socketEventArg.Completed += delegate(object s, SocketAsyncEventArgs e) result = e.SocketError.ToString(); _clientDone.Set(); }; _clientDone.Reset(); _socket.ConnectAsync(socketEventArg); _clientDone.WaitOne(TIMEOUT_MILLISECONDS); return result; }
Sockets HÁLÓZAT public string Send(string data) { string response = "Operation Timeout"; if (_socket != null) SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint; socketEventArg.UserToken = null; socketEventArg.Completed += delegate(object s, SocketAsyncEventArgs e) response = e.SocketError.ToString(); _clientDone.Set(); }; byte[] payload = Encoding.UTF8.GetBytes(data); socketEventArg.SetBuffer(payload, 0, payload.Length); _clientDone.Reset(); _socket.SendAsync(socketEventArg); _clientDone.WaitOne(TIMEOUT_MILLISECONDS); } else response = "Socket is not initialized"; return response;
Sockets HÁLÓZAT public string Receive() { string response = "Operation Timeout"; if (_socket != null) SocketAsyncEventArgs socketEventArg = new SocketAsyncEventArgs(); socketEventArg.RemoteEndPoint = _socket.RemoteEndPoint; socketEventArg.SetBuffer(new Byte[MAX_BUFFER_SIZE], 0, MAX_BUFFER_SIZE); socketEventArg.Completed += delegate(object s, SocketAsyncEventArgs e) if (e.SocketError == SocketError.Success) response = Encoding.UTF8.GetString(e.Buffer, e.Offset, e.BytesTransferred); response = response.Trim('\0'); } else response = e.SocketError.ToString(); _clientDone.Set(); }; _clientDone.Reset(); _socket.ReceiveAsync(socketEventArg); _clientDone.WaitOne(TIMEOUT_MILLISECONDS); else response = "Socket is not initialized"; return response;
Sockets HÁLÓZAT public void Close() { if (_socket != null) _socket.Close(); }
Sockets És végül az előző oldalakon bemutatott osztály használata: HÁLÓZAT Sockets És végül az előző oldalakon bemutatott osztály használata: SocketClient client = new SocketClient(); client.Connect(remoteHost, remotePort); client.Send("Hello World"); client.Receive(); client.Close();