Skip to content


Subversion checkout URL

You can clone with
Download ZIP

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: SignalR/SignalR
head fork: SignalR/SignalR
This comparison is big! We’re only showing the most recent 250 commits
Commits on Feb 13, 2014
@Xiaohongt Xiaohongt update to re-set connection lastActiveAt when startHeartbeat, call st…
…artHeartbeat and monitorKeepAlive when transport fully start

Commits on Feb 14, 2014
@Xiaohongt Xiaohongt update per code review feedback 4475a4a
Commits on Feb 17, 2014
@Xiaohongt Xiaohongt update to re-set LastActiveAt when start HeartbeatMonitor in .Net client 76adf23
Commits on Feb 19, 2014
@Xiaohongt Xiaohongt update for SignalR package dependency Katana minimum version 924d4d0
Commits on Feb 26, 2014
@Xiaohongt Xiaohongt update to prevent script error for property 'pingInterval' 9bd0a08
@Xiaohongt Xiaohongt update JS client foreverFrame not to reconnect when connecting fc671a5
Commits on Mar 03, 2014
@Xiaohongt Xiaohongt Update for race condition to skip abort when connection already disco…

Commits on Mar 04, 2014
@alex-simonov alex-simonov Optimized RedisMessageBus performance
- changed serialization format for RedisMessage
- Booksleeve transactions changed to Lua script
@alex-simonov alex-simonov Optimized RedisMessageBus performance
- moved deserialization of RedisMessage out of lock

Commits on Mar 05, 2014
@Xiaohongt Xiaohongt Update ReflectedHubDescriptorProvider for loaded Type when ReflectedT…

@garysharp garysharp Update ServiceBus config documentation
With Line 32 (within the constructor) setting `TopicCount` to `5`, should the documentation on the `TopicCount` property indicate that the default is `5` rather than `1`?
Commits on Mar 07, 2014
@alex-simonov alex-simonov Order usings d3d022b
@alex-simonov alex-simonov Optimized RedisMessageBus performance
- fixed code analysis error CA1305: parse message.Id with CUltureInfo.InvariantCulture

Commits on Mar 08, 2014
@davidfowl davidfowl Merge pull request #2917 from alex-simonov/dev
Optimized RedisMessageBus performance
Commits on Mar 10, 2014
@davidfowl davidfowl Merge pull request #2917 from alex-simonov/dev
Optimized RedisMessageBus performance
@Xiaohongt Xiaohongt Merge branch 'patch-1' of i…
…nto garysharp-patch-1
Commits on Mar 11, 2014
@DamianEdwards DamianEdwards Fix test that requires a 404 to use 8ffa0a7
@DamianEdwards DamianEdwards Merge branch 'release' into dev 0f3ed4c
Commits on Mar 14, 2014
@Xiaohongt Xiaohongt Add input argument to define TableCount for SqlMessageBusRun in Stress e8be944
@Xiaohongt Xiaohongt Add input argument to define TableCount for SqlMessageBusRun in Stress 9929f38
@DamianEdwards DamianEdwards Merge branch 'release' into dev fcfb472
Commits on Mar 17, 2014
@DamianEdwards DamianEdwards Fix for null ref exception in Service Bus scale-out:
- The ConnectionContext is now created immediately and passed in to the Subscribe call for initialization, so it should never be null
- #2933
@DamianEdwards DamianEdwards Fixes null ref errors in Service Bus scale-out:
- Handle when the factory creation fails in the ServiceBusConnection ctor
- Handle when topics are never created and then are attempted to be closed in Dispose
- #2937
@DamianEdwards DamianEdwards Merge branch 'release' into dev 9e0f838
@abnanda1 abnanda1 Queuing messages when scaleout stream is in initial state fd7d1f1
Commits on Mar 18, 2014
@AlexeyRokhin AlexeyRokhin Temporary table for new PayloadId is removed 1ca3232
Commits on Mar 19, 2014
@abnanda1 abnanda1 Made changes as per code review feedback 84e24a5
@abnanda1 abnanda1 Made changes as per code review feedback b6ff781
Commits on Mar 20, 2014
@davidfowl davidfowl Addressed code review comments a670511
@DamianEdwards DamianEdwards Cleaned up queuing changes in scale-out:
- Moved QueuingBehavior enum to root namespace
- Updated doc comments
- Changed logic in ScaleoutStream.Send when waiting on drain task to be more careful RE null refs
@DamianEdwards DamianEdwards Updated scale-out stream unit tests:
- Added some more tests to verify behavior of queuing behavior
Commits on Mar 21, 2014
@DamianEdwards DamianEdwards Merge branch 'release' into dev dd2ee27
Commits on Mar 25, 2014
@abnanda1 abnanda1 Throw configuration exception in service bus d8ce39c
@abnanda1 abnanda1 Removed Lazy initialization for Service Bus e4f84ba
Commits on Mar 26, 2014
@abnanda1 abnanda1 Merge branch 'release' into dev d06d197
Commits on Mar 27, 2014
@DamianEdwards DamianEdwards Merge branch 'release' b940230
@DamianEdwards DamianEdwards Updated versions for 2.2.0-pre 50f4ca1
Commits on Apr 02, 2014
@mikary mikary Merge pull request #2939 from AlexeyRokhin/dev
Temporary table for new PayloadId is removed
Commits on Apr 05, 2014
@thomaswr thomaswr Add performance counters to measure current connections by transport 0b9b547
@thomaswr thomaswr Keep previous logic for updating ConnectionsCurrent PerfCounter. 3490e5b
Commits on Apr 07, 2014
@DamianEdwards DamianEdwards Forever Frame JS client now runs received payloads through custom JSO…
…N if configured:

- Capture the original JSON for the connection
- In FF transport, if current JSON !== original JSON (custom set) then stringify using original JSON and parse using custom JSON
- Added JS unit tests to cover new behavior
- Corrected hubs.js version in samples project
- #2945
@DamianEdwards DamianEdwards Address review feedback & added samples code: ae9d5f7
@DamianEdwards DamianEdwards Fix version in hubs.js 863c486
Commits on Apr 08, 2014
@halter73 halter73 Server changes to support long-polling keep alives e5f84ea
@halter73 halter73 Support long-polling keep alives on the JS client 2d3aa09
@halter73 halter73 Support long-polling keep alives on the .NET client 98644c1
@halter73 halter73 Disable keep alive checks if there is a LongPollDelay
- Ensure we don't timeout the connection because there is a delay between
  poll requests
- Disable keep alive checks  if the server didn't send back the LongPollDelay
  as part of the response to /negotiate. That indicates the server is running
  an older version of SignalR that doesn't send long polling keep alives.

@halter73 halter73 Start testing the long-polling transport in KeepAliveFacts 6a2219d
Commits on Apr 09, 2014
@halter73 halter73 Fix deadlock in ForeverTransport.ProcessMessages
- Since disposer.Set sometimes blocks waiting on InitializeTcs,
  ensure disposer.Set isn't called until InitializeTcs has completed.
@pheiberg pheiberg NullMethodDescriptor now lists potential matching methods 64d9f21
@pheiberg pheiberg Inconsistent casing in NullMethodDescriptor fixed eed4799
@halter73 halter73 Updated tests to expect NullMethodDescriptor to list overloads 187f766
@thematlin thematlin fixed spelling of Error_NoDependencyResolver in owin extensions 5e7844e
Commits on Apr 10, 2014
@halter73 halter73 Stop the connection heartbeat after the JS test has completed
- Leaving the heartbeat active caused an FFConnectFacts test to fail since
  verifyLastActive was unexpectedly getting invoked by the heartbeat
@halter73 halter73 Update tests so they pass in TestSwarm
- Use relative paths to establish connections
- Don't assert the long polling transport is monitoring keep alives if
  XHRs have no onprogress event
Commits on Apr 11, 2014
@abnanda1 abnanda1 Made the backoff time for Service Bus configurable 42f02ea
@moozzyk moozzyk Adding support for WP81 and WPA81 targets. cb0d588
Commits on Apr 14, 2014
@moozzyk moozzyk TooStrict - removing "use strict" from the output js files. Fixes #2964. e5bd314
Commits on Apr 18, 2014
@halter73 halter73 Clear reconnectAttemptTimeout in serverSentEvents.stop 41cba31
Commits on Apr 23, 2014
@gustavo-armenta gustavo-armenta #2757 Support flowing causation error to disconnect error handler in …
…JS client
@moozzyk moozzyk DWORD WINAPI GetLastError(void);
Introducing the LastError property containing the last connection error including timeouts. The property is available in boths CS and JS clients. Timeouts will now raise OnError/Error.
@abnanda1 abnanda1 Fixed errors with performance counters d218ea2
Commits on Apr 28, 2014
@DamianEdwards DamianEdwards Updated 594efa3
Commits on May 01, 2014
@moozzyk moozzyk HostIlE - IE11 connects to a wrong host in cross domain scenarios whe…
…n a relative connection url is used (fixes #2959)

When parsing a relatinve uri with <a /> (anchor) IE11 does not provide the protocol so we fall back to using `window.document.location` to resolve connection details. However if the host could be read from the url provided by the user we should use it instead of the one from the `window.document.location`. The fix is to use the host from the url provided by the user if possible and fall back to using the host from the `window.document.location` if the host could not be read from the user's url.
Commits on May 02, 2014
@moozzyk moozzyk Silence!
Baselining Chutzpah coverage report to prevent from showing the file as modified each time build.cmd is run.
Commits on May 06, 2014
@abnanda1 abnanda1 Made HubCallerContext easier for mock unit testing 984b7c3
@abnanda1 abnanda1 Made changes as per code review feedback 16e86b3
Commits on May 08, 2014
@mazur mazur Added blanket.js for JS code coverage
Resolves #1625
@moozzyk moozzyk UncoveringTheBlanket - Disabling blanket when running tests from comm…
…and line.

When running tests from command line blanket has to be disabled otherwise QUnit.Start() will be called twice which causes a "global failure". Note that chutzpah has an option (/coverage switch) to collect code coverage and is using blanket (sic!) to do this.
@moozzyk moozzyk DontPublicizeInternalAffairs - changing visibility of OnReconnecting …
…from public to internal (fixes #3005)

OnReconnecting is not meant to be used by end users and therefore should not be public.
@moozzyk moozzyk TSPCleaningSolution - fixing command line and VS build warnings 12c508a
Commits on May 10, 2014
@halter73 halter73 Remove inefficient/unnecessary command messages
- Stop publishing messages whenever a transport connects/reconnects
- Stop publishing messages whenever a transport connection is lost
@halter73 halter73 Add param to PC.OnDisconnected to distinguish clean/unclean disconnects
- A clean disconnect indicates the client called stop
- An unclean disconnect indicates the client timed out
- A timeout may or may not mean the client reconnected to another server
@halter73 halter73 Add param to Hub.OnDisconnected to distinguish clean/unclean disconnects
- A clean disconnect indicates the client called stop
- An unclean disconnect indicates the client timed out
- A timeout may or may not mean the client reconnected to another server
@halter73 halter73 Trigger OnConnected with a /start request
Triggering OnConnected while handling the /connect request made it
difficult to report errors and send/process messages while OnConnected
was running.
@halter73 halter73 Stop blocking transport WriteQueues
- Always return a valid Task from ForeverTransport.EnqueueOperation
  allowing us to reduce allocations inside of Subscription.Work
- This will prevent older clients that don't make a /start request from
  receiving proper errors when OnConnected throws
@halter73 halter73 Ajax logic unification in the JS client 7b52d3a
@halter73 halter73 Reindent calls to the new transportLogic.ajax function in the JS client d1dcd6d
@halter73 halter73 Use /start requests to connect - JS Client
- Include the client protocol in the query string of all requests
@halter73 halter73 Use /start requests to connect - .NET Client
- Include the client protocol in the query string of all requests
@halter73 halter73 Stop sharing MyReconnect instances in our tests
- There must be only one PersistentConnection per request
Commits on May 12, 2014
@halter73 halter73 Lower version back to 2.1.0 for release 6108a5d
@halter73 halter73 Bump version to 2.2.0 58b71c7
Commits on May 19, 2014
@abnanda1 abnanda1 Added additonal tracing for Redis ee53d33
Commits on May 21, 2014
@halter73 halter73 Invert logic to raise long polling reconnects on the server
- Checking for "/poll" to suppress reconnects does not work since 1.0.*
  clients do not append anything to the URL of poll requests.
- Raising reconnects only  for long polling requests ending with
  "/reconnect" preserves the old server behavior
- This prevents 1.0.* clients from causing a reconnect per poll

@halter73 halter73 Merge branch 'release' into dev 008fa73
@abnanda1 abnanda1 Added new Redis tracing 6589a98
@halter73 halter73 Create PreserveCulture extension method for use with async/await 3124d0d
@halter73 halter73 Use PreserveCulture for all awaits fe2f822
Commits on May 23, 2014
@moozzyk moozzyk LostInReconnection - when the client successfully reconnected it did …
…not clear the TimedOut/HasBeenWarned flags which could result in never invoking the LostConnection/OnConnectionSlow methods if a new timeout happened immediately after reconnecting because we would use stale values set before the reconnection happened (i.e. the client would "think" it already invoked the LostConnection/OnConnectionSlow method after reconnecting whereas it actually did not). Fixes #3046.
@moozzyk moozzyk 97%There - Creating projects for Store WebSocketTransport
Adding VS projects for supporting  WebSockets on Windows Phone 8.1.
 - Test project requires beta version of xunit (and a corresponding pre-release runner)
 - Nuget.exe had to be updated (Updating NuGet.exe to 2.8.2-beta)
 - Build.proj will be updated seperately

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch feature-StoreWebSocks
# Changes to be committed:
#	modified:   .nuget/NuGet.exe
#	modified:   .nuget/packages.config
#	modified:   Microsoft.AspNet.SignalR.sln
#	modified:   src/Microsoft.AspNet.SignalR.Client.Portable/Microsoft.AspNet.SignalR.Client.Portable.csproj
#	modified:   src/Microsoft.AspNet.SignalR.Client.Portable/packages.config
#	new file:   src/Microsoft.AspNet.SignalR.Client.Store/Microsoft.AspNet.SignalR.Client.Store.csproj
#	new file:   src/Microsoft.AspNet.SignalR.Client.Store/Properties/AssemblyInfo.cs
#	new file:   src/Microsoft.AspNet.SignalR.Client.Store/Transports/WebSocketTransport.cs
#	new file:   src/Microsoft.AspNet.SignalR.Client.Store/app.config
#	new file:   src/Microsoft.AspNet.SignalR.Client.Store/packages.config
#	modified:   src/Microsoft.AspNet.SignalR.Client.WinRT/Resources.resw
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Images/UnitTestLogo.scale-100.png
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Images/UnitTestSmallLogo.scale-100.png
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Images/UnitTestSplashScreen.scale-100.png
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Images/UnitTestStoreLogo.scale-100.png
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Microsoft.AspNet.SignalR.Client.Store.Tests.csproj
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Microsoft.AspNet.SignalR.Client.Store.Tests_TemporaryKey.pfx
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Package.appxmanifest
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Properties/AssemblyInfo.cs
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/Transports/WebSocketTransportTests.cs
#	new file:   tests/Microsoft.AspNet.SignalR.Client.Store.Tests/packages.config
@moozzyk moozzyk Run Forrest, Run! - enabling running store tests in build.cmd ec48a64
@moozzyk moozzyk NugetNugget - separating wpa81 platform which will now include the po…
…rtable client library and wpa81 specific dll containing WebSocket transport.
@moozzyk moozzyk InfravisionHelpsKeepThingsClean - Adding InternalsVisibleTo for Moq t…
…o allow keep internal methods internal.

One of the WebSocketHandler.SendAsync() overloads was made public only to enable testing. Granting InternalsVisibleTo to Moq makes it possible to revert this change.
Similarly one of the WebSocketHandler.ProcessWebSocketRequestAsync was public and had parameter of WebSocket type however there is not an API that would return a bare WebSocket to the user and therefore the API is not usable from the end user's perspective.

(The main motivation for hiding these methods is that they take parameters of types that are not available on all platforms and therefore a lot of effort would be required to make the APIs consistent across platform without any apparent benefit since the methods should not be public in the first place).

Also making WebSocketHandler class abstract since it is not really usable standalone so there is no need for it to be instantiatable.
@moozzyk moozzyk GreatDevsCopy - mimicking WebSocketTransport class hierarchy existing…
… in the .NET client.
@moozzyk moozzyk BobTheUrlBuilder - refactoring the code to group building urls in a s…
…ingle class.
@moozzyk moozzyk LessMiserablePortable - we have some code that is specific to the por…
…table version of the client but we don't have any tests for this code. Adding a test project for tests excersizing code specific to the portable version of the client.
Commits on May 29, 2014
@halter73 halter73 Make PreserverCultureAwaiters structs like TaskAwaiter 8b1dabb
Commits on May 31, 2014
@moozzyk moozzyk Let'sMakeADeal - adding support for Negotiate to the store WebSocketT…
@moozzyk moozzyk RavioliCompositionOverSpaghettiInheritance - refactoring usage of Web…
…SocketHandler on the client

WebSocketHandler class is used on the server and on the client. While on the server we just instantiate this type on the client the WebSocketTransport derives from it. This blocks creating a base class for client transport which would contain a common functionality (e.g. parsing the response). After this change WebSocketTransport no longer derives from the WebSocketHandler but instantiates it and uses it internally.
Commits on Jun 03, 2014
@moozzyk moozzyk IAlwaysFeltTheyHadSomethingInCommon - adding a base class for all "re…
…al" client transports (i.e. AutoTransport is excluded since it is only a wrapper) and moving common functionality.
@moozzyk moozzyk BetterThreadSafeThanSorry - fixing UrlBuilder threading issue
The same instance of UrlBuilder could be used by multiple threads which could corrupt the internal state of the StringBuilder instance used by the UrlBuilder which results in weird exceptions. This manifested as random CI build failures. The fix is to turn the UrlBuilder to a static class (it does not need to be mocked) and create a new instance of StringBuilder each time.
@moozzyk moozzyk NonValueAddedTax - removing WebSocketConnectionInfo private class. It…
… does not add any value but requires dotting each time we need the connection thus cluttering the code.
Commits on Jun 09, 2014
@Xiaohongt Xiaohongt Change long polling request to use same URL and POST instead of GET
- Update client protocol
- This change is intended to avoid a memory leak in IE/Chrome

Commits on Jun 10, 2014
@halter73 halter73 Stop using the PreserveCultureAwaiter in MessageBroker and Subscription ae8bc0b
@Xiaohongt Xiaohongt Remove resource string in trace message a905fa6
@moozzyk moozzyk UntilServerDoUsApart - implementing logic for starting WebSocket tran…
…sport on WindowsPhone 8.1.
Commits on Jun 11, 2014
@moozzyk moozzyk BetterPath - updating path to MSBuild to use v12 required to build Wi…
…ndows Store projects.
@moozzyk moozzyk Backtalk - implementing Send in the Store WebSocket transport cd76a6b
@moozzyk moozzyk ThisPesteringClient - adding support for reconnect
Client will now reconnect if the underlying WebSocket gets closed unless a reconnect timeout is exceeded or the operation has been cancelled.
Commits on Jun 14, 2014
@moozzyk moozzyk ThinkYouReSoCleverButNowYouMustSever - WPA81 WebSocket transport disc…
Commits on Jun 17, 2014
@Xiaohongt Xiaohongt Disable blanket.js for IE8 b670d7c
Commits on Jun 19, 2014
@moozzyk moozzyk AccidentalRefactoring - removing an unneeded public method
One of the methods was made public for testing purposes but since we now have InternalsVisibleTo it can be removed.
@DamianEdwards DamianEdwards Merge branch 'release' 8b7c92f
Commits on Jun 20, 2014
@moozzyk moozzyk HuckingFunctionalTests - adding functional tests for WebSockets
Note: it is impossible to self host SignalR within Store unit tests and it is not possible to start a new process from Store unit test projects.

Fixing a bug when Reconnected event would never be invoked for Store WebSocket transport
@moozzyk moozzyk LostInAction - implementing the LostConnection method for Store WebSo…
Commits on Jun 22, 2014
@thomaswr thomaswr Merge branch 'dev' of into dev dac24a1
@thomaswr thomaswr Re-add connection counter methods for longPolling transport (merge co…
…nflict resolved)
Commits on Jun 25, 2014
@ermontgo ermontgo Allow HubConnections to be used in Crank
- Created IConnectionFactory as injection point for developers to
customize how a Connection is created
- Created DefaultConnectionFactory to retain behavior of creating a
regular Connection
- Modified Crank client to compose the IConnectionFactory dependency
using MEF. If no candidate is supplied by an external assembly, the
client will automatically use the DefaultConnectionFactory

Commits on Jul 01, 2014
@abnanda1 abnanda1 Removed additional Redis tracing bb29f06
Commits on Jul 03, 2014
@DamianEdwards DamianEdwards Pass TraceSource through to Task.Catch() instead of global trace 76e5216
@DamianEdwards DamianEdwards Review feedback:
- Enable Catch() to trace in the .NET clients, via an overload that takes a trace delegate
- Fix some cases where null TraceSource was being passed that shouldn't be
@DamianEdwards DamianEdwards Code review feedback:
- Make arg names more obvious
@DamianEdwards DamianEdwards Code review feedback dc618f2
@DamianEdwards DamianEdwards Code review feedback b226679
Commits on Jul 04, 2014
@halter73 halter73 Initiate /start request after a transport is selected in the JS client
- This is how the .NET client already behaves

Commits on Jul 08, 2014
@abnanda1 abnanda1 Migrating from BookSleeve to StackExchange.Redis e3da96e
@abnanda1 abnanda1 Made RedisMessageBus async/await 213c7a9
@abnanda1 abnanda1 Added tests for Redis 9fe04a7
@abnanda1 abnanda1 Moved Redis tests to a new project and fixed code analysis errors 6a3a40e
@abnanda1 abnanda1 Using string named StackExchange.Redis fce78f9
@abnanda1 abnanda1 Made changes as per code review feedback dc146e2
@abnanda1 abnanda1 Fixed internals visible build break and made tests async 644b178
Commits on Jul 09, 2014
@abnanda1 abnanda1 Fixed error in Redis Connection send method aec3189
Commits on Jul 14, 2014
@halter73 halter73 Bump version to 2.1.1 018cf77
Commits on Jul 15, 2014
@DamianEdwards DamianEdwards .NET Client: Dispatch failed hub invocation callbacks on reconnecting 98bff5f
@DamianEdwards DamianEdwards Merge branch 'release' into dev
@DamianEdwards DamianEdwards Make HubConnection.cs in client use new Catch overload
- Updated xunit
- #3101
@olivierbloch olivierbloch Added Protocol documentation 8e7180b
Commits on Jul 16, 2014
@moozzyk moozzyk Fixing CI
the entry in packages.config is required otherwise Store/Portable tests may fail due to xunit.execution.dll missing in the target folder
@Xiaohongt Xiaohongt Restore the latest value to Redis Key on ConnectionRestored event for…
… Redis restart

@moozzyk moozzyk Shaving4Minutes - decoupling JS and .NET UnitTests
When investigating .NET or JS UnitTest failures we always had to run both kinds. This was especially irritating when targeting .NET unit tests only because JS unit added ~4 minutes to each run. Now we have separate targets for .Net unit tests and JS unit tests and therefore we can run just one kind of unit tests. Note that the RunUnitTests target works as it was before (i.e. runs both JS and .NET unit tests).
Commits on Jul 17, 2014
@halter73 halter73 Respond to JSONP send requests with the correct MIME type cefd688
@halter73 halter73 Rewrite ProcessStartRequests to not use async/await to avoid deadlocks
- Deadlocks would occur in the old async/await code if someone attached
  to the PreSendRequestHeaders event.

@halter73 halter73 Attach to the PreSendRequestHeaders event for only one test 00c2455
Commits on Jul 19, 2014
@moozzyk moozzyk MomentaryLapsOfReason - fixing stupid code (I wrote)
HTTP => WS scheme conversion is supposed to be done everywhere by UrlBuilder however the net45 WebSocketTransport was using both - UrlBuilder *and* manual conversion *in the same method*. Fixing the code to use the Uri converted by the UrlBuilder instead of doing the same conversion the second time.
Commits on Jul 22, 2014
@halter73 halter73 Bump the ConnectionsDisconnected PC even when OnDisconnected throws b24ed8a
@halter73 halter73 Removed the old OnDisonnected overload
- Removing the old overload is preferable to changing its behavior

@DamianEdwards DamianEdwards Added test covering bug #3151 3c028f8
Commits on Jul 25, 2014
@DamianEdwards DamianEdwards Merge branch 'release' 3f63af8
@DamianEdwards DamianEdwards Add & fix SQL tracing d553342
@moozzyk moozzyk AsyncIsHard - fixing a deadlock in EndToEnd tests
One of the EndToEnd tests was blocking in a continuation that was run synchronously which caused a deadlock and test failures. The fix is to wait asynchronously.
Commits on Jul 26, 2014
@moozzyk moozzyk FarewellOutputHubsFromUrl - removing OutputHubsFromUrl from signalr.exe
Fixes bug #2769
@Xiaohongt Xiaohongt Add a workaround to make sure Redis connection is reconnected in Conn…
…ectionRestored event

Commits on Jul 28, 2014
@halter73 halter73 Merge branch 'release' into dev 1540c08
Commits on Jul 29, 2014
@Xiaohongt Xiaohongt Update message loops sample to detect all duplicate messages then sto…
…p connection when new message is not duplicate instead of running forever
Commits on Jul 30, 2014
@DamianEdwards DamianEdwards Update version to 2.1.2 8aae96c
@DamianEdwards DamianEdwards Fix SQL duplicate messages issue:
- Ensure the state is reset at the beginning of the receive loop
- Added more tracing to detect unexpected states in the ObservableDbOperation state machine
- #2988
Commits on Jul 31, 2014
@DamianEdwards DamianEdwards Merge pull request #2849 from DNIDNL/bug-1057
Change log message when Forever Frame is skipped in browsers that support SSE.
@DamianEdwards DamianEdwards Merge pull request #2843 from thecodejunkie/keep-alive-error-message-…

JS client keep alive starting log message update
@thomaswr thomaswr Fix summary comments and descriptions in PerformanceCounterManager. e2b696a
Commits on Aug 04, 2014
@moozzyk moozzyk DumpingDisconnect.Net
Removing handling Disconnect message in the .NET Client as the server no longer sends Disconnect messages.
@moozzyk moozzyk DumpingDisconnect.JS
Removing handling Disconnect message in the .JS client as the server no longer sends Disconnect messages.
@moozzyk moozzyk TransportAbortHandlerIsMovingOn - removing transport abort handler
(We wish him luck in /dev/null)

Fixes workitems #3067 and #3102
@halter73 halter73 Update Katana (Microsoft.Owin) dependencies from 2.0.1 to 2.1.0 e15548c
@halter73 halter73 Prevent MessageBus from hanging forever in the second call to Dispose 0cc5121
Commits on Aug 05, 2014
@DamianEdwards DamianEdwards Added unit tests 530ebd4
Commits on Aug 06, 2014
@moozzyk moozzyk Transport!YouAreFinished! - generalizing AbortSent flag
The transport is not in a usable state if either the abort request is sent or the transport was disposed. When in this state the transport should no longer be used. Before it was guarded by the AbortSent flag but the abort request does not necessarily have to be sent so the AbortSent was replaced with a new Finished flag which is set to true if either the Abort method was called or the transport was disposed.
Commits on Aug 07, 2014
@moozzyk moozzyk Welcome?BackTransportAbortHandler - reverting TransportAbortHandler r…

We found that removing TransportAbortHandler caused a few issues and there might be more we did not find. Reverting change to avoid breaks.
@halter73 halter73 Send ACKs to the connection waiting on the ACK not the acker itself
- These ACKs are used to verify that commands published to the
  bus have been received and processed (e.g. group commands).
- Previously, ACKs only succeeded if the waiter and acker were on
  the same machine and/or the acker happened to be the waiter.

Commits on Aug 12, 2014
@moozzyk moozzyk SmallBigData - allowing messages longer than 32766 characters
Fixes work item #3040

Non .NET Framework 4 clients used the FormUrlEncodedContent class to escape messages sent by clients. This limited the length of the message to 32766 characters. For longer the client would fail with the invalid uri exception saying "The Uri string is too long". The messages are not actually Uris so we don't care about the length. The fix is to use a custom UrlEncoder we already have which is functionally equivalent to Uri.EscapeDataString() but will not throw if message is longer than 32766 characters.
@DamianEdwards DamianEdwards Update version in hub.js in sample project f1ea1ee
@DamianEdwards DamianEdwards Merge branch 'release' into dev e7960ff
Commits on Aug 14, 2014
@halter73 halter73 Fixed the Hub Auth portion of the Sample project
- By calling MapSignalR later we can ensure SignalR runs after auth
  middleware and HttpApplication.AuthenticateRequest.

Commits on Aug 15, 2014
@moozzyk moozzyk GoneWithARace - prevent a client failure caused by a race
When building Url we checked whether connection.ConnectionToken, connection.MessageId and connection.GroupsToken were null before appending them to the Url. However there was a small window in which these properties could be set to null in a different thread if a Disconnect happened causing the client to fail with the ArgumentNullException. Assigning the property value to a local variable and using the variable throughout the method prevents from the failure.

Fixes #3211, #3212
@moozzyk moozzyk OutOfBodyExperience - removing IFrame from body
For foreverFrame transport SignalR appended the iframe as the last child of the body node. However some libraries (e.g. jQuery UI) move nodes inside the body which causes the iframe to reload which results in sending a "connect" request even though the transport has already been started. Because we cleaned up some things after sending the original "connect" request the second "connect" request may cause "Object expected" exceptions. The fix is to move the iframe outside the document body node so it is less likely to be touched/moved by the user's code.

Fixes #2795
@moozzyk moozzyk Merge branch 'bug-2795' into dev 1a1885a
@halter73 halter73 Initiate /start request after a transport is selected in the JS client
- This is how the .NET client already behaves

Commits on Aug 18, 2014
@halter73 halter73 Remove unnecessary Trace property from MessageBus 5a91e5d
Commits on Aug 19, 2014
@pdagosta pdagosta fix for bug #3166
Changed ObservableDbOperation to look for Updates instead of Inserts
based on changes to send.sql
@DamianEdwards DamianEdwards Merge branch 'release' into dev 5cde775
@DamianEdwards DamianEdwards Update to JSON.NET 6.0.4 717bef2
@DamianEdwards DamianEdwards Fix JSON.NET reference in Silverlight samples 11369b1
@DamianEdwards DamianEdwards Merge branch 'release' into dev
@DamianEdwards DamianEdwards Update JSON.NET to 6.0.4 in .NET client for wpa81 f951dce
@moozzyk moozzyk Fixing WP8 sample references after the update of Json.Net eb18b69
@moozzyk moozzyk Fixing WP8 sample references after the update of Json.Net 52368f9
Commits on Aug 20, 2014
@moozzyk moozzyk BetterPath - updating path to MSBuild to use v12 required to build Wi…
…ndows Store projects.
Commits on Aug 21, 2014
@mikary mikary Merge branch 'release' into dev 765311f
@abnanda1 abnanda1 Updating nuspec for Stackexchange 4e12740
Commits on Aug 26, 2014
@moozzyk moozzyk AllYourGiftCardsBelongTeMe - fixing random ERROR_SHARING_VIOLATION in…
… tests that use HttpListener

Functional tests using HttpListener tend to fail randomly with the "System.Net.HttpListenerException : The process cannot access the file because it is being used by another process" exception. This error indicates that the port a test is trying to use is already in use. Tests choose ports randomly from the 8000 to 9000 range. The problem is that on some machines some ports from this range are already in use e.g.:

The following two tests failed with the exception from above:

ConnectionFacts.RequestHeadersCanBeSetOnceConnected.HttpListener.LongPolling.89.test.trace.log                   --> HttpListener url: http://localhost:8678
ConnectionFacts+Start.ManuallyRestartedClientMaintainsConsistentState.HttpListener.Websockets.742.test.trace.log --> HttpListener url: http://localhost:8675

However netstat -ano shows that ports 8675, 8677, 8678 were already in use
TCP        ESTABLISHED     3436   WindowsAzureGuestAgent
TCP        ESTABLISHED     2944   WaAppAgent
TCP      ESTABLISHED     3436   WindowsAzureGuestAgent

The fix is to verify if the port is in use before using it and if it is choose a different port from the range
@halter73 halter73 Remove new usages of async/await on the server
- This change is meant to help avoid potential deadlocks caused by
   attaching to the PreSendRequestHeader event

@halter73 halter73 Avoid delegate allocations introduced by removing async/await 82a31e9
Commits on Aug 28, 2014
@moozzyk moozzyk SleepWell - adding a workaround for a race condition in WebSockets
There seems to be a race condition in WebSockets which may result in a deadlock/livelock which in turn causes a failure to the EndToEndTests. Adding a delay seems to fix the issue so we can use it as a workaround until the issue in the WebSocket implementation is fixed.
@halter73 halter73 Increase test timeout since SafeCTS.Cancel() can slow down execution
- Running tests in parallel led to frequent timeouts here
@halter73 halter73 Enumerate messages before completing the Subscribe callback in tests
- Subscription.Work was previously clearing the list during enumeration
Commits on Sep 05, 2014
@moozzyk moozzyk Simplifying ServerSentEventsTransport
 - NotSafeForWork - Removing unnecessary SafeInvoker from ServerSentEventsTransport
 - DisposingOfDisposer - unifying request cancellation
@moozzyk moozzyk FoundABetterHome - moving ProcessResponse to ClientTransportBase class 96f09dc
Commits on Sep 06, 2014
@moozzyk moozzyk HowToDismantleALongPollingBomb
 - merging LongPolingTransport and PollingRequestHandler
 - removing NegotiateInitializer
 - tests and clean up
@DamianEdwards DamianEdwards Set constructor of JS hub proxies f52064d
Commits on Sep 08, 2014
@moozzyk moozzyk PortableDroid - updating references to Microsoft.Net.Http NuGet package
Updating references to Microsoft.Net.Http NuGet package to fix build errors appearing when building a Xamarin Android project after adding the Signalr Client NuGet package to the project.
Commits on Sep 09, 2014
@halter73 halter73 Disable keep alive checks in long polling transport - JS 5a55d30
@halter73 halter73 Timeout long polls exceeding the ConnectionTimeout on the JS client ae2bd7e
@halter73 halter73 Disable keep alive checks in long polling transport - .NET 6ce6314
@halter73 halter73 Merge branch 'release' into dev d0f506f
Commits on Sep 11, 2014
@moozzyk moozzyk OnStartedTouchedBase - moving OnStarted to ClientTransportBase
All client transports have to follow the same start pattern where they have to override the OnStarted method instead of the Start method.
Commits on Sep 12, 2014
@moozzyk moozzyk WhoFliesHighFallsLow - pushing TransportInitializeHandler to ClientTr…

Removing references to TransportInitializationHandler from transport implementations since initialization is now handled in the ClientTransportBase class. Types derived from the `ClientTransportBase` can now override the OnStartFailed protected method to be notified if/when a failure occurs during starting the transport and can invoke the `TransportFailed` method if a transport specific error occurred to notify the `ClientTransportBase` about the error.
Commits on Sep 15, 2014
@DamianEdwards DamianEdwards Merge branch 'release' 5dd9f39
Commits on Sep 16, 2014
@moozzyk moozzyk FalseStart - client becomes unsuable if transport fails during start …

If a transport failed during the start request or if the start request failed we would not fail the transport or throw an exception leaving the transport in kind of a zombie state. The reason for this was that we used `SafeThreadInvoker` to start the start request which invalidated any further `Fail` calls. When AutoTransport was being used we would always try the next transport even though the correct behavior was to throw from the `Start` method if the connect request completed successfully and a failure occured during start request. The fix is to not to use SafeThreadInvoker to start the start request. In addition we have to track the state of the initialization phase to prevent failing the transport due to timeout once the connect request completed successfully and to throw the StartException after connect request completed successfully to let the AutoTransport know to not try the next available transport but to re-throw the exception.

Workitem: 3227
@moozzyk moozzyk XUnit++ - updating XUnit 2.0 to beta-4 ca7bbb2
@moozzyk moozzyk TheFirstPlaceLoser - removing unnecessary calls to `TransportFailed`
`ServerSentEventsTransport` and `LongPollingTransport` registered callbacks to let the `TransportInitializationHandler` know that the transport failed (by calling the `TransportFailed` method) when the `disconnectToken` is tripped . This was unnecessary since the `TransportInitializationHandler` registered first its own callback for the same reason which would call `TransportInitializationHandler.Fail()`. Because we use the `SafeThreadInvoker` for invoking the `Fail()` method the calls from the transport implementations were no-ops because they would have happened after the call from the `TransportInitializationHandler` which in turn would make `SafeThreadInvoker` ignore any further calls.
Commits on Sep 18, 2014
@moozzyk moozzyk Ready...Set...Fail - fixing a race in the `CancelledTaskHandledinLong…
…PollingLoop` test

The `CancelledTaskHandledinLongPollingLoop` test is returning a cancelled task from the poll request and then is checking if the OnError method with the `OperationCancelledException` argument was invoked. It used a wait handle to block the test until the poll request returns. However the `OnError` method is invoked on a different thread and therefore the test may fail due to a race condition if the test starts verification before the `OnError` method is actually called. The fix is to wait with the verification until the `OnError` is called (or fail if it is not called within 2 seconds) to avoid the race.
Commits on Sep 19, 2014
@DamianEdwards DamianEdwards Sanitize perf counter category instance names:
- Adds support for instance names passed in by Katana v3+ (currently Katana v3+ breaks perf counters in SignalR)
- Tweaked how instance name is set internally in PerformanceCounterManager to make it testable without affecting the public contract
- Updated the sample project to use Katana v3 to ensure we get coverage of fix
- #3002
@halter73 halter73 Stop processing messages before ending the WebSocketFunc Task
- This should prevent ObjectDisposedExceptions from WindowsIdentity
  in OnDisconnected
@halter73 halter73 Added test to verify that WindowsIdentities are usable in OnDisconnected e1b1de6
Commits on Sep 23, 2014
@moozzyk moozzyk RespectMe - respecting disconnect token in store WebSocketTransport
The store WebSocketTransport did not respect the disconnect token. Now if the disconnect cancellation token is cancelled we will not try to reconnect if the websocket gets closed and if we are already trying to reconnect we will stop doing this. Note that we don't need to register to the cancellation event since the disconnect cancellation token is cancelled only in the `Connection.Disconnect()` method which also disposes the transport which will take care of the all needed clean up.

Also fixed a race in the WebSocketTransport.Dispose method which might lead to unwanted reconnection attempts.

Workitem #3189
@moozzyk moozzyk Doomed - prevent from sending a message when reconnecting
Previously the store `WebSocketTransport` would accept `Send` requests when the transport was reconnecting. The change to invoke `OnError()` and throw an exception if this happens - similarly to what we do in the .NET Client.
@halter73 halter73 Detect slow callbacks in .NET client receive queue and trigger an error
Since we serialize the invocations of Received callbacks in the .NET client,
there is a real risk of deadlocks resulting from one callback blocking waiting
on another callback to execute.

This commit introduces a TaskQueueMonitor used exclusively by the .NET client
to try to detect callbacks that are running long and notify the user using
Connection.OnError that a callback may be deadlocked.

The amount of time a callback may execute before an error is raised can be
configured using Connection.DeadlockErrorTimeout. The default timeout is
10 seconds.

Commits on Oct 01, 2014
@BrandonLWhite BrandonLWhite Added IUntrackedDisposable and blacklisted in DefaultDependencyResolver.
- DefaultDependencyResolver will now no longer retain instances to IDisposables that implement the special marker interface IUntrackedDisposable.

Commits on Oct 04, 2014
@BrandonLWhite BrandonLWhite Addressed code review comments in test cases. e5a13cd
Commits on Oct 10, 2014
@DamianEdwards DamianEdwards Merge pull request #3286 from BrandonLWhite/bug-3208
Fixed memory leak of IHub instances. This resolves #3208.  DefaultDepend...
@DamianEdwards DamianEdwards Fix Code Analysis error 2322304
@DamianEdwards DamianEdwards Merge branch 'master' of into…
… olivierbloch-master
@DamianEdwards DamianEdwards Merge branch 'olivierbloch-master' 68b7e0b
@DamianEdwards DamianEdwards Rename 'documentation' folder to 'docs' af938bc
@mikary mikary Merge pull request #3099 from ermontgo/dev
Allow HubConnections to be used in Crank
@mikary mikary Merge pull request #2971 from thomaswr/dev
Add performance counters to measure current connections by transport
Commits on Oct 15, 2014
@halter73 halter73 Handle transport failures occurring in the connecting state
- In the event of any transport error prior to the init message,
  the transport should immediately stop and allow the connection to
  fall back to another transport.
- In the event of any transport error during the start request,
  the entire connection should immediately be stopped
@halter73 halter73 Remove the JS AppDomain restart test
- This test proved unreliable with long polling which would not always
  go into the reconnecting state if the restart was in between polls
- The restarting AppDomain could cause other tests running concurrently
  locally or in TestSwarm to fail
- The JS test is replaced by an equivalent .NET client functional test
Commits on Oct 24, 2014
@moozzyk moozzyk DontDieInTheStore - handling exceptions in receive in websocket store…
… transport

If an exception happened while reading a message using the websocket store transport we would not handle. As a result it would be bubbled up and would crash the user's app. The user have no way of catching this exception. The fix is to catch exceptions and report them to the user using the IConnection.Error and to close the websocket to enable reconnect logic.

Workitem #3313
@Xiaohongt Xiaohongt Removed await from RedisMessageBus.Send
- The await would cause an unnecessary SyncContext.Post that would prevent
  the returned Task from completing if there was a thread blocked on the
  returned Task while holding the SyncConetext.

@halter73 halter73 Update Client.Store platform moniker to portable-win81+wpa81
- Previously, when I tried installing the client package into a universal app,
  only the phone project got the additional dll with WebSocket support.
Commits on Oct 29, 2014
@moozzyk moozzyk CloseIsNotDispose - make sure the websocket is disposed after closing 522cddb
Commits on Oct 30, 2014
@halter73 halter73 Remove unused onFailedTimeoutHandle from the JS client 823fcab
@halter73 halter73 Fix poll redirection test to account for failures while connecting 88d5a95
@halter73 halter73 Fix foreverFrame test to account for failures prior to timeout 2f66221
@halter73 halter73 Avoid an uncaught TypeError which can stop the entire QUnit test suite
- If the WebSocket transport failed to connect, an uncaught type error
  would be thrown from the modified
@halter73 halter73 Remove setTimeout from JS test
- Previously, even the minimum timeout would take so long the connection
  would successfully start before the timeout fired.
@halter73 halter73 Remove WebSocket prototype from mock WebSocket
- Safari 7.1+ complains if you use a non-WebSocket object sharing the
  WebSocket prototype. HubSpot/pace#173
Commits on Oct 31, 2014
@Xiaohongt Xiaohongt Use ThreadPool for method to connect Redis to avoid conneciton start …

Commits on Nov 06, 2014
@moozzyk moozzyk YouShould(Not)AlwaysCallDispose - reverting dispoing websockets on th…
…e server

AspNetWebsocket uncoditionally throws a NotSupportedException from the Dispose() method, so #ifdefing the invocation so that we only call Dispose on the client.
Commits on Nov 21, 2014
@halter73 halter73 Support using inherited interfaces in Hub<T> b2a159b
Commits on Dec 02, 2014
@halter73 halter73 Update Resources.resw so git doesn't annoy me
- The WinRT client has been superseded by the portable and store clients,
  so we should probably just remove this project.
@halter73 halter73 Always subscribe to all ACKs on all servers
Prior to this fix, Groups.Add would fail to complete when there was no
subscription configured to receive the ACK on the server Groups.Add was
called on.
Commits on Dec 04, 2014
@halter73 halter73 Prevent stack overflows when a Hub implements IHub 8d315ac
@halter73 halter73 Make Hub<T>.Clients settable for testing
- Setting Hub<T>.Clients to null will really set it to its default value

Commits on Dec 12, 2014
@halter73 halter73 Only initiate the WebSocket closing handshake on the client 8fc7da3
@halter73 halter73 Revert "Added test to verify that WindowsIdentities are usable in OnD…

This reverts commit e1b1de6.
@halter73 halter73 Revert "Stop processing messages before ending the WebSocketFunc Task"
This reverts commit 654bfb4.
Commits on Jan 13, 2015
@DamianEdwards DamianEdwards Merge branch 'release' 3a219c1