public void BeginGetCustomerServiceData(int id, GetCustomerServiceCallback callback) { HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create( new Uri(serverBaseUri, relativeGetCustomerServiceDataURI)); request.Method = "POST"; getCustomerServiceCallback = callback; request.BeginGetRequestStream(delegate(IAsyncResult result) { HttpWebRequest webRequest = result.AsyncState as HttpWebRequest; webRequest.ContentType = "text/xml"; Stream requestStream = webRequest.EndGetRequestStream(result); StreamWriter streamWriter = new StreamWriter(requestStream); // Serializa los datos a enviar. DataContractSerializer serializer = new DataContractSerializer(typeof(int)); serializer.WriteObject(streamWriter.BaseStream, id); streamWriter.Close(); // Realizar una llamada asíncrona para obtener la respuesta. // Un Callback será invocado sobre un hilo ejecutándose en segundo plano. request.BeginGetResponse(new AsyncCallback(EndGetCustomerServiceData), request); } , request); }
public void EndGetCustomerServiceData(System.IAsyncResult result) { GetCustomerServiceResult callResult = new GetCustomerServiceResult(); try { HttpWebRequest request = (HttpWebRequest)result.AsyncState; HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(result); // Crear la instancia del deserializador. DataContractSerializer serializer = new DataContractSerializer(typeof(CustomerServiceDataEntity)); // Deserializar el modelo de datos. CustomerServiceDataEntity deserializedCustomerService = (CustomerServiceDataEntity)serializer.ReadObject(response.GetResponseStream()); callResult.CustomerService = deserializedCustomerService; } catch (SerializationException serializationError) { Debug.WriteLine(serializationError.Message); } catch (WebException webError) { Debug.WriteLine(webError.Message); } // Si hay callback, invocarlo. if (getCustomerServiceCallback != null) { getCustomerServiceCallback(callResult); getCustomerServiceCallback = null; } }