Created
July 21, 2012 11:50
-
-
Save davidfowl/3155602 to your computer and use it in GitHub Desktop.
Fix ravendb SignalR
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/Imports/SignalR/SignalR.Client/Http/DefaultHttpClient.cs b/Imports/SignalR/SignalR.Client/Http/DefaultHttpClient.cs | |
index 345a30f..3999ed6 100644 | |
--- a/Imports/SignalR/SignalR.Client/Http/DefaultHttpClient.cs | |
+++ b/Imports/SignalR/SignalR.Client/Http/DefaultHttpClient.cs | |
@@ -17,8 +17,12 @@ 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> | |
@@ -30,8 +34,12 @@ 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)); | |
} | |
} | |
} | |
diff --git a/Imports/SignalR/SignalR.Client/Http/HttpWebResponseWrapper.cs b/Imports/SignalR/SignalR.Client/Http/HttpWebResponseWrapper.cs | |
index 29363da..23d4f7d 100644 | |
--- a/Imports/SignalR/SignalR.Client/Http/HttpWebResponseWrapper.cs | |
+++ b/Imports/SignalR/SignalR.Client/Http/HttpWebResponseWrapper.cs | |
@@ -7,9 +7,11 @@ namespace Raven.Imports.SignalR.Client.Http | |
public class HttpWebResponseWrapper : IResponse | |
{ | |
private readonly HttpWebResponse _response; | |
+ private readonly IRequest _request; | |
- public HttpWebResponseWrapper(HttpWebResponse response) | |
+ public HttpWebResponseWrapper(IRequest request, HttpWebResponse response) | |
{ | |
+ _request = request; | |
_response = response; | |
} | |
@@ -25,6 +27,10 @@ public Stream GetResponseStream() | |
public void Close() | |
{ | |
+ if (_request != null) | |
+ { | |
+ _request.Abort(); | |
+ } | |
((IDisposable)_response).Dispose(); | |
} | |
} | |
diff --git a/Raven.Client.Lightweight/Document/DocumentStore.cs b/Raven.Client.Lightweight/Document/DocumentStore.cs | |
index 1dbeeb7..66c5462 100644 | |
--- a/Raven.Client.Lightweight/Document/DocumentStore.cs | |
+++ b/Raven.Client.Lightweight/Document/DocumentStore.cs | |
@@ -190,6 +190,8 @@ public override string Identifier | |
/// </summary> | |
public string ApiKey { get; set; } | |
+ private Imports.SignalR.Client.Connection connection; | |
+ | |
#if !SILVERLIGHT | |
private string connectionStringName; | |
@@ -264,6 +266,11 @@ public override void Dispose() | |
if (jsonRequestFactory != null) | |
jsonRequestFactory.Dispose(); | |
+ | |
+ if (connection != null) | |
+ { | |
+ connection.Stop(); | |
+ } | |
foreach (var replicationInformer in replicationInformers) | |
{ | |
@@ -449,14 +456,17 @@ private void InitializeSecurity() | |
SetHeader(args.Request.Headers, "Authorization", currentOauthToken); | |
}; | |
- changesConnectionFactory.ConfigureConnection += connection => | |
- connection.OnPrepareRequest += request => | |
- { | |
- if (string.IsNullOrEmpty(currentOauthToken)) | |
- return; | |
- | |
- request.AddHeader("Authorization", currentOauthToken); | |
- }; | |
+ changesConnectionFactory.ConfigureConnection += connection => | |
+ { | |
+ this.connection = connection; | |
+ connection.OnPrepareRequest += request => | |
+ { | |
+ if (string.IsNullOrEmpty(currentOauthToken)) | |
+ return; | |
+ | |
+ request.AddHeader("Authorization", currentOauthToken); | |
+ }; | |
+ }; | |
#if !SILVERLIGHT | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment