Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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;
            }
        }