Skip to content

Commit

Permalink
Abort the request before calling close on the request in the .NET cli…
Browse files Browse the repository at this point in the history
…ent.
  • Loading branch information
davidfowl committed Jul 21, 2012
1 parent 758b0d4 commit 50ee2b9
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 5 deletions.
18 changes: 14 additions & 4 deletions SignalR.Client/Http/DefaultHttpClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,13 @@ public class DefaultHttpClient : IHttpClient
/// <returns>A <see cref="Task{IResponse}"/>.</returns>
public Task<IResponse> GetAsync(string url, Action<IRequest> prepareRequest)
{
return HttpHelper.GetAsync(url, request => prepareRequest(new HttpWebRequestWrapper(request)))
.Then(response => (IResponse)new HttpWebResponseWrapper(response));
IRequest req = null;
return HttpHelper.GetAsync(url, request =>
{
req = new HttpWebRequestWrapper(request);
prepareRequest(req);
}
).Then(response => (IResponse)new HttpWebResponseWrapper(req, response));
}

/// <summary>
Expand All @@ -30,8 +35,13 @@ public Task<IResponse> GetAsync(string url, Action<IRequest> prepareRequest)
/// <returns>A <see cref="Task{IResponse}"/>.</returns>
public Task<IResponse> PostAsync(string url, Action<IRequest> prepareRequest, Dictionary<string, string> postData)
{
return HttpHelper.PostAsync(url, request => prepareRequest(new HttpWebRequestWrapper(request)), postData)
.Then(response => (IResponse)new HttpWebResponseWrapper(response));
IRequest req = null;
return HttpHelper.PostAsync(url, request =>
{
req = new HttpWebRequestWrapper(request);
prepareRequest(req);
},
postData).Then(response => (IResponse)new HttpWebResponseWrapper(req, response));
}
}
}
11 changes: 10 additions & 1 deletion SignalR.Client/Http/HttpWebResponseWrapper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,12 @@ namespace SignalR.Client.Http
{
public class HttpWebResponseWrapper : IResponse
{
private readonly IRequest _request;
private readonly HttpWebResponse _response;

public HttpWebResponseWrapper(HttpWebResponse response)
public HttpWebResponseWrapper(IRequest request, HttpWebResponse response)
{
_request = request;
_response = response;
}

Expand All @@ -25,6 +27,13 @@ public Stream GetResponseStream()

public void Close()
{
if (_request != null)
{
// Always try to abort the request since close hangs if the connection is
// being held open
_request.Abort();
}

((IDisposable)_response).Dispose();
}
}
Expand Down

0 comments on commit 50ee2b9

Please sign in to comment.