public virtual async Task <T> RequestAsync <T, U>(string endPoint, U request) where T : SoapResponseType where U : SoapRequestType { SoapOperationResponse soapResponse = await this.SendRequest(endPoint, request); if (soapResponse != null) { int status = (int)soapResponse.StatusCode; if (status >= 200 && status < 300) { T response = soapResponse.GetResponseType <T>(); return(response); } } return(default(T)); }
public static async Task <SoapOperationResponse> Retrieve(HttpResponseMessage response) { SoapOperationResponse result = new SoapOperationResponse(response.StatusCode, response.ReasonPhrase, null); if (response.IsSuccessStatusCode) { Stream stream = await response.Content.ReadAsStreamAsync(); using (StreamReader sr = new StreamReader(stream)) { result.XmlDocument = XDocument.Load(sr); } } return(result); }
protected virtual async Task <SoapOperationResponse> SendRequest <T>(string endPoint, T requestParameters) where T : SoapRequestType { XDocument soapRequest = this.SoapRequest(requestParameters); try { HttpRequestMessage request = new HttpRequestMessage() { RequestUri = new Uri(_apiURL), Method = HttpMethod.Post }; request.Content = new StringContent(soapRequest.ToString(), Encoding.UTF8, "text/xml"); request.Headers.Clear(); this.HttpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml")); request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml"); request.Headers.Add("SOAPAction", _xsvc.NamespaceName + endPoint); // can this one really be left empty? contained: "http://mynamespace.com/GetStuff"; using (HttpResponseMessage response = await this.HttpClient.SendAsync(request)) { return(await SoapOperationResponse.Retrieve(response)); } } catch (AggregateException ex) { if (ex.InnerException is TaskCanceledException) { throw ex.InnerException; } else { throw ex; } } catch (Exception ex) { throw ex; } }