Ejemplo n.º 1
0
        /// <summary>
        /// Method to execute a given soap request
        /// </summary>
        /// <param name="xmlSOAP">the soap request</param>
        /// <param name="url">the soap url</param>
        /// <param name="parameters">the parameters</param>
        /// <returns></returns>
        private async Task <XDocument> ExecuteAsync(string xmlSOAP, string url, SoapRequestParameters parameters)
        {
            _handler.ServerCertificateCustomValidationCallback = delegate { return(true); };
            _handler.Credentials = parameters.Credentials;

            using (System.Net.Http.HttpClient client = new HttpClient(_handler))
            {
                var request = new HttpRequestMessage()
                {
                    RequestUri = new Uri(url),
                    Method     = HttpMethod.Post
                };

                request.Content = new StringContent(xmlSOAP, Encoding.UTF8, "text/xml");
                request.Headers.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/xml"));
                request.Content.Headers.ContentType = new MediaTypeHeaderValue("text/xml");
                request.Headers.Add("SOAPAction", $"{parameters.SoapAction}");

                HttpResponseMessage response = await client.SendAsync(request).ConfigureAwait(false);

                if (!response.IsSuccessStatusCode)
                {
                    throw new Exception(response.ReasonPhrase);
                }

                Stream stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);

                var sr           = new StreamReader(stream);
                var soapResponse = XDocument.Load(sr);

                return(soapResponse);
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Method to create the envelope
        /// </summary>
        /// <param name="parameters">the request parameters</param>
        /// <returns></returns>
        private string CreateEnvelope(SoapRequestParameters parameters)
        {
            var sb = new StringBuilder();

            sb.Append(@"<?xml version='1.0' encoding='UTF-8'?>
                         <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
                         xmlns:xsd='http://www.w3.org/2001/XMLSchema'
                         xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>
                         <soap:Body>");
            sb.Append($" <{parameters.Action} xmlns='{parameters.RequestNameSpace}'>");
            foreach (SoapRequestParameter parameter in parameters.Parameters)
            {
                sb.Append($"<{parameter.ParameterName}>{parameter.ParameterValue}</{parameter.ParameterName}>");
            }
            sb.Append($"</{parameters.Action}>");
            sb.Append(@"</soap:Body></soap:Envelope>");

            return(sb.ToString());
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Method to invoke the given action
        /// </summary>
        /// <param name="Action"></param>
        /// <returns></returns>
        internal async Task <XDocument> InvokeAsync(string action, params SoapRequestParameter[] parameter)
        {
            SoapClient            client     = new SoapClient(_handler);
            SoapRequestParameters parameters = new SoapRequestParameters();

            parameters.UserName = this.UserName;
            parameters.Password = this.Password;

            parameters.RequestNameSpace = this.RequestNameSpace;
            parameters.SoapAction       = $"{this.RequestNameSpace}#{action}";
            parameters.Action           = $"{action}";
            if (parameter != null)
            {
                parameters.Parameters.AddRange(parameter);
            }

            XDocument soapResult = await client.InvokeAsync(this.Url, parameters).ConfigureAwait(false);

            this.ParseSoapFault(soapResult);

            return(soapResult);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Method to execute the soap request
        /// </summary>
        /// <param name="parameters">the request parameters</param>
        /// <returns>the result of the call</returns>
        public async Task <XDocument> InvokeAsync(string url, SoapRequestParameters parameters)
        {
            string envelope = this.CreateEnvelope(parameters);

            return(await this.ExecuteAsync(envelope, url, parameters).ConfigureAwait(false));
        }