Skip to content

Instantly share code, notes, and snippets.

@davidfowl
Created July 21, 2012 11:50
Show Gist options
  • Save davidfowl/3155602 to your computer and use it in GitHub Desktop.
Save davidfowl/3155602 to your computer and use it in GitHub Desktop.
Fix ravendb SignalR
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