diff --git a/.gitignore b/.gitignore index ea2383c..dc8370e 100644 --- a/.gitignore +++ b/.gitignore @@ -229,4 +229,5 @@ _Pvt_Extensions .paket/paket.exe # FAKE - F# Make -.fake/ \ No newline at end of file +.fake/ +/.nuget/nuget.exe diff --git a/MessageBird/Client.cs b/MessageBird/Client.cs index 86b8226..79cc6d9 100644 --- a/MessageBird/Client.cs +++ b/MessageBird/Client.cs @@ -11,6 +11,12 @@ public class Client { private readonly IRestClient restClient; + public TimeSpan RequestTimeout + { + get { return restClient.RequestTimeout; } + set { restClient.RequestTimeout = value; } + } + private Client(IRestClient restClient) { this.restClient = restClient; diff --git a/MessageBird/Net/IRestClient.cs b/MessageBird/Net/IRestClient.cs index 14b5852..41472b4 100644 --- a/MessageBird/Net/IRestClient.cs +++ b/MessageBird/Net/IRestClient.cs @@ -1,5 +1,6 @@ using MessageBird.Net.ProxyConfigurationInjector; using MessageBird.Resources; +using System; namespace MessageBird.Net { @@ -9,6 +10,7 @@ public interface IRestClient string AccessKey { get; } string Endpoint { get; } IProxyConfigurationInjector ProxyConfigurationInjector { get; } + TimeSpan RequestTimeout { get; set; } string ApiVersion { get; } string ClientVersion { get; } diff --git a/MessageBird/Net/RestClient.cs b/MessageBird/Net/RestClient.cs index aba8813..fc284d6 100644 --- a/MessageBird/Net/RestClient.cs +++ b/MessageBird/Net/RestClient.cs @@ -20,6 +20,8 @@ public class RestClient : IRestClient public IProxyConfigurationInjector ProxyConfigurationInjector { get; private set; } + public TimeSpan RequestTimeout { get; set; } + public string ClientVersion { get { return "1.0"; } @@ -35,15 +37,26 @@ public string UserAgent get { return string.Format("MessageBird/ApiClient/{0} DotNet/{1}", ApiVersion, ClientVersion); } } - public RestClient(string endpoint, string accessKey, IProxyConfigurationInjector proxyConfigurationInjector) + public RestClient(string endpoint, string accessKey, IProxyConfigurationInjector proxyConfigurationInjector, TimeSpan requestTimeout) { Endpoint = endpoint; AccessKey = accessKey; ProxyConfigurationInjector = proxyConfigurationInjector; + RequestTimeout = requestTimeout; + } + + public RestClient(string endpoint, string accessKey, IProxyConfigurationInjector proxyConfigurationInjector) + : this(endpoint, accessKey, proxyConfigurationInjector, TimeSpan.FromSeconds(60)) + { + } + + public RestClient(string accessKey, IProxyConfigurationInjector proxyConfigurationInjector, TimeSpan requestTimeout) + : this(HttpsRestMessagebirdComEndpoint, accessKey, proxyConfigurationInjector, requestTimeout) + { } public RestClient(string accessKey, IProxyConfigurationInjector proxyConfigurationInjector) - : this(HttpsRestMessagebirdComEndpoint, accessKey, proxyConfigurationInjector) + : this(accessKey, proxyConfigurationInjector, TimeSpan.FromSeconds(60)) { } @@ -137,6 +150,7 @@ private HttpWebRequest PrepareRequest(string requestUriString, string method) request.Accept = ApplicationJsonContentType; request.ContentType = ApplicationJsonContentType; request.Method = method; + request.Timeout = RequestTimeout > TimeSpan.Zero ? (int)RequestTimeout.TotalMilliseconds : 60000; WebHeaderCollection headers = request.Headers; headers.Add("Authorization", String.Format("AccessKey {0}", AccessKey)); diff --git a/csharp-rest-client.sln b/csharp-rest-client.sln index f5295a5..d351e06 100644 --- a/csharp-rest-client.sln +++ b/csharp-rest-client.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2013 -VisualStudioVersion = 12.0.31101.0 +# Visual Studio 15 +VisualStudioVersion = 15.0.27428.2015 MinimumVisualStudioVersion = 10.0.40219.1 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MessageBird", "MessageBird\MessageBird.csproj", "{C49CD3F8-BCDB-4BA9-B817-6A6C65452510}" EndProject @@ -12,14 +12,11 @@ EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{25EE7FD1-9433-4EEE-99F3-A8344DF7AC6F}" ProjectSection(SolutionItems) = preProject .nuget\NuGet.Config = .nuget\NuGet.Config - .nuget\NuGet.exe = .nuget\NuGet.exe + .nuget\nuget.exe = .nuget\nuget.exe .nuget\NuGet.targets = .nuget\NuGet.targets EndProjectSection EndProject Global - GlobalSection(CodealikeProperties) = postSolution - SolutionGuid = 18c1a31e-4063-4902-9aad-882f3cfab5d4 - EndGlobalSection GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU Release|Any CPU = Release|Any CPU @@ -41,4 +38,10 @@ Global GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {C59D1B5F-9D00-477F-BD73-FC2D4B0A3F0A} + EndGlobalSection + GlobalSection(CodealikeProperties) = postSolution + SolutionGuid = 18c1a31e-4063-4902-9aad-882f3cfab5d4 + EndGlobalSection EndGlobal