From 4febebabff484f0c1cce365807f20ee940b81294 Mon Sep 17 00:00:00 2001 From: "gu.martinm@gmail.com" Date: Tue, 25 Feb 2014 00:51:07 +0100 Subject: [PATCH] JsonSerializerSettings, try/catch exceptions, HttpClient with timeout --- Mono/RemoteAgents/GTKLinux/GTKLinux.csproj | 2 + .../GTKLinux/Model/CallRemoteProcedure.cs | 46 ++++++++++++++-------- 2 files changed, 32 insertions(+), 16 deletions(-) diff --git a/Mono/RemoteAgents/GTKLinux/GTKLinux.csproj b/Mono/RemoteAgents/GTKLinux/GTKLinux.csproj index ad9a7f6..712fb3a 100644 --- a/Mono/RemoteAgents/GTKLinux/GTKLinux.csproj +++ b/Mono/RemoteAgents/GTKLinux/GTKLinux.csproj @@ -10,6 +10,8 @@ GTKLinux GTKLinux v4.5 + Little program to connect with remote applications +through JSON API. true diff --git a/Mono/RemoteAgents/GTKLinux/Model/CallRemoteProcedure.cs b/Mono/RemoteAgents/GTKLinux/Model/CallRemoteProcedure.cs index 709543f..3ec0a97 100644 --- a/Mono/RemoteAgents/GTKLinux/Model/CallRemoteProcedure.cs +++ b/Mono/RemoteAgents/GTKLinux/Model/CallRemoteProcedure.cs @@ -1,13 +1,15 @@ using System; -using System.Runtime.Remoting.Messaging; -using Newtonsoft.Json; +using System.Net; using System.Net.Http; +using System.Reflection; using System.Runtime.Remoting.Lifetime; +using System.Runtime.Remoting.Messaging; +using System.Security.Cryptography.X509Certificates; using System.Threading.Tasks; using Gtk; -using System.Reflection; -using System.Net; -using System.Security.Cryptography.X509Certificates; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Newtonsoft.Json.Serialization; namespace Example.RemoteAgents.GTKLinux.Model { @@ -16,32 +18,44 @@ namespace Example.RemoteAgents.GTKLinux.Model async public Task callRemoteService(string uri, string method) { + TResult result = default(TResult); var postData = new POST(); postData.id = "2114567586433855105"; postData.jsonrpc = "2.0"; postData.method = method; + var jsonSettings = new JsonSerializerSettings{ + Error = delegate(object sender, ErrorEventArgs args) + { + Console.WriteLine(args.ErrorContext.Error.Message); + args.ErrorContext.Handled = true; + } + }; - string data = JsonConvert.SerializeObject(postData); - HttpContent content = new StringContent(data, System.Text.Encoding.UTF8, "application/json-rpc"); + try { + string data = JsonConvert.SerializeObject(postData, jsonSettings); + HttpContent content = new StringContent(data, System.Text.Encoding.UTF8, "application/json-rpc"); - HttpResponseMessage response = await this.issueCall(uri, content); + HttpResponseMessage response = await this.issueCall(uri, content); - TResult result = default(TResult); + if (response.StatusCode == HttpStatusCode.OK) { + Task responseBytes = response.Content.ReadAsByteArrayAsync(); + string responseString = System.Text.Encoding.UTF8.GetString(responseBytes.Result); - if (response.StatusCode == HttpStatusCode.OK) { - Task responseBytes = response.Content.ReadAsByteArrayAsync(); - string responseString = System.Text.Encoding.UTF8.GetString(responseBytes.Result); - POSTResult postResult = JsonConvert.DeserializeObject>(responseString); - result = postResult.result; + POSTResult postResult = JsonConvert.DeserializeObject>(responseString, jsonSettings); + result = postResult.result; + } + } + catch (Exception e) + { + Console.WriteLine("callRemoteService exception. Message: {0} Stacktrace: {1} ", e.Message, e.StackTrace); } return result; } - async private Task issueCall(string uri, HttpContent content) { - using (HttpClient client = new HttpClient()) + using (HttpClient client = new HttpClient{ Timeout = TimeSpan.FromSeconds(5)}) { return await client.PostAsync(uri, content); } -- 2.1.4