RequestClient.cs

Contains the function for sending SOAP requests, call on by the invokemessage functions with given soap-envelopes.

// ------------------------------------------------------------------------------------------
// <copyright file="RequestClient.cs" company="Pointsharp AB">
//   Pointsharp AB
// </copyright>
// <summary>
//   Defines the RequestClient class.
// </summary>
// ------------------------------------------------------------------------------------------

namespace SecMaker.NiP.Client
{
	using System;
	using System.IO;
	using System.Net;
	using System.Text;
	using System.Xml;

	internal class RequestClient
	{
		internal static string Url { get; set; }
		internal static string ActionName { get; set; }
		internal static string ContentType { get; set; }
		internal static HttpVerbEnum Method { get; set; }
		internal static string DataToSend { get; set; }

		public static string InvokeClient()
		{
			var xDoc = new XmlDocument();
			xDoc.LoadXml(DataToSend);

			var request = (HttpWebRequest) WebRequest.Create(Url);
			request.ContentType = ContentType;
			request.Method = Method.ToString();
			request.Headers.Add("SOAPAction", "\"http://www.secmaker.com/NiP/IServiceSoap/" + ActionName + "\"");

			using (var stream = request.GetRequestStream())
			{
				xDoc.Save(stream);
			}

			var toReturn =
				string.Empty;

			try
			{
				using (var response = request.GetResponse())
				{
					using (var stream = response.GetResponseStream())
					{
						if (stream != null)
						{
							using (var sr = new StreamReader(stream, Encoding.UTF8))
							{
								toReturn = sr.ReadToEnd();
							}
						}
					}
				}
			}
			catch (WebException err)
			{
				using (var response = err.Response)
				{
                    if (response != null)
                    {
                        var httpResponse =
                        (HttpWebResponse)response;
                        Console.WriteLine(@"Error code: {0}", httpResponse.StatusCode);

                        using (var stream = response.GetResponseStream())
                        {
                            if (stream != null)
                            {
                                using (var reader = new StreamReader(stream))
                                {
                                    var text = reader.ReadToEnd();
                                    Console.WriteLine(text);
                                }
                            }
                        }
                    }

				}
			}
			catch (Exception err)
			{
				Console.WriteLine(err.Message);
			}

			return toReturn;
		}

		public enum HttpVerbEnum
		{
			// ReSharper disable InconsistentNaming

			/// <summary>
			/// HTTP verb: GET.
			/// </summary>
			GET,

			/// <summary>
			/// HTTP verb: POST.
			/// </summary>
			POST,

			/// <summary>
			/// HTTP verb: UPDATE.
			/// </summary>
			UPDATE,

			/// <summary>
			/// HTTP verb: DELETE.
			/// </summary>
			DELETE

			// ReSharper restore InconsistentNaming
		}
	}
}