using Disco.Models.ClientServices; using Newtonsoft.Json; using System.IO; using System.Net; using System.Reflection; namespace Disco.Client.Extensions { public static class ClientServicesExtensions { #if DEBUG public const string ServicePathAuthenticatedTemplate = "http://WS-GSHARP:57252/Services/Client/Authenticated/{0}"; public const string ServicePathUnauthenticatedTemplate = "http://WS-GSHARP:57252/Services/Client/Unauthenticated/{0}"; #else public const string ServicePathAuthenticatedTemplate = "http://DISCO:9292/Services/Client/Authenticated/{0}"; public const string ServicePathUnauthenticatedTemplate = "http://DISCO:9292/Services/Client/Unauthenticated/{0}"; #endif public static ResponseType Post(this ServiceBase Service, bool Authenticated) { ResponseType serviceResponse; string serviceUrl; if (Authenticated) serviceUrl = string.Format(ServicePathAuthenticatedTemplate, Service.Feature); else serviceUrl = string.Format(ServicePathUnauthenticatedTemplate, Service.Feature); HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(serviceUrl); request.UserAgent = $"Disco-Client/{Assembly.GetExecutingAssembly().GetName().Version.ToString(3)}"; request.ContentType = "application/json"; request.Method = WebRequestMethods.Http.Post; request.UseDefaultCredentials = true; request.Timeout = 300000; // 5 Minutes var jsonSerializer = new JsonSerializer(); using (var requestWriter = new StreamWriter(request.GetRequestStream())) { using (var jsonWriter = new JsonTextWriter(requestWriter)) { jsonSerializer.Serialize(jsonWriter, Service); } } using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { using (var responseReader = new StreamReader(response.GetResponseStream())) { using (var jsonReader = new JsonTextReader(responseReader)) { serviceResponse = jsonSerializer.Deserialize(jsonReader); } } } return serviceResponse; } } }