{"action":"created","comment":{"url":"https://api.github.com/repos/aspnet/Docs/pulls/comments/198882499","pull_request_review_id":132894289,"id":198882499,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5ODg4MjQ5OQ==","diff_hunk":"@@ -0,0 +1,126 @@\n+---\n+title: Differences between SignalR and ASP.NET Core SignalR\n+author: rachelappel\n+description: Differences between SignalR and ASP.NET Core SignalR \n+monikerRange: '>= aspnetcore-2.1'\n+ms.author: rachelap\n+ms.date: 06/30/2018\n+uid: signalr/version-differences\n+---\n+\n+# Differences between SignalR and ASP.NET Core SignalR\n+\n+ASP.NET Core SignalR is not compatible with clients or servers for ASP.NET SignalR. This article details the features which have been removed or changed in the ASP.NET Core SignalR.\n+\n+## Feature differences\n+\n+### Automatic reconnects\n+\n+Automatic reconnects are no longer supported. Previously, SignalR tried to reconnect to the server if the connection was dropped. Now, if the client is disconnected the user must explicitly start a new connection if they want to reconnect.\n+\n+### Protocol support\n+\n+ASP.NET Core SignalR supports JSON, as well as a new binary protocol based on [MessagePack](xref:signalr/messagepackhubprotocol). Additionally, custom protocols can be created.\n+\n+## Differences on the server\n+\n+The SignalR server-side libraries are included in the `Microsoft.AspNetCore.App` package that is part of the **ASP.NET Core Web Application** template for both Razor and MVC projects.\n+\n+SignalR is an ASP.NET Core middleware, so it must be configured by calling `AddSignalR` in `Startup.ConfigureServices`.\n+\n+```csharp\n+services.AddSignalR();\n+```\n+\n+To configure routing, map routes to hubs inside the `UseSignalR` method call in the `Startup.Configure` method.\n+\n+```csharp\n+app.UseSignalR(routes =>\n+{\n+    routes.MapHub<ChatHub>(\"/hub\");\n+});\n+```\n+\n+### Sticky sessions now required\n+\n+Because of how scale-out worked in the previous versions of SignalR, clients could reconnect and send messages to any server in the farm. Due to changes to the scale-out model, as well as not supporting reconnects, this is no longer supported. Now, once the client connects to the server it needs to interact with the same server for the duration of the connection.\n+\n+### Single hub per connection\n+\n+In ASP.NET Core SignalR, the connection model has been simplified. Connections are made directly to a single hub, rather than a single connection being used to share access to multiple hubs.\n+\n+### Streaming\n+\n+SignalR now supports [streaming data](xref:signalr/streaming) from the hub to the client.\n+\n+### State\n+\n+The ability to pass arbitrary state between clients and the hub (often called HubState) has been removed, as well as support for progress messages. There is no counterpart of hub proxies at the moment.\n+\n+## Differences on the client\n+\n+### TypeScript\n+\n+The ASP.NET Core version of SignalR is written in [TypeScript](https://www.typescriptlang.org/). You can write in JavaScript or TypeScript when using the [JavaScript client](xref:signalr/javascript-client).\n+\n+### The JavaScript client is hosted at [npm](https://www.npmjs.com/)\n+\n+In previous versions, the JavaScript client was obtained through a NuGet package in Visual Studio. For the Core versions, the [@aspnet/signalr npm package](https://www.npmjs.com/package/@aspnet/signalr) contains the JavaScript libraries. This package isn't included in the **ASP.NET Core Web Application** template. Use npm to obtain and install the `@aspnet/signalr` npm package.\n+\n+```console","path":"aspnetcore/signalr/version-differences.md","position":70,"original_position":70,"commit_id":"cd70488c662468a5c3107d53825505649e724c30","original_commit_id":"cd70488c662468a5c3107d53825505649e724c30","user":{"login":"rachelappel","id":1857975,"node_id":"MDQ6VXNlcjE4NTc5NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/1857975?v=4","gravatar_id":"","url":"https://api.github.com/users/rachelappel","html_url":"https://github.com/rachelappel","followers_url":"https://api.github.com/users/rachelappel/followers","following_url":"https://api.github.com/users/rachelappel/following{/other_user}","gists_url":"https://api.github.com/users/rachelappel/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelappel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelappel/subscriptions","organizations_url":"https://api.github.com/users/rachelappel/orgs","repos_url":"https://api.github.com/users/rachelappel/repos","events_url":"https://api.github.com/users/rachelappel/events{/privacy}","received_events_url":"https://api.github.com/users/rachelappel/received_events","type":"User","site_admin":false},"body":"Now that you mention that, do we really need the `npm init -y` line? Since this is about version differences, and that only deals with npm metadata in package.json. Thoughts?","created_at":"2018-06-28T15:21:10Z","updated_at":"2018-06-28T15:21:10Z","html_url":"https://github.com/aspnet/Docs/pull/7304#discussion_r198882499","pull_request_url":"https://api.github.com/repos/aspnet/Docs/pulls/7304","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/comments/198882499"},"html":{"href":"https://github.com/aspnet/Docs/pull/7304#discussion_r198882499"},"pull_request":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/7304"}},"in_reply_to_id":198644571},"pull_request":{"url":"https://api.github.com/repos/aspnet/Docs/pulls/7304","id":197490601,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk3NDkwNjAx","html_url":"https://github.com/aspnet/Docs/pull/7304","diff_url":"https://github.com/aspnet/Docs/pull/7304.diff","patch_url":"https://github.com/aspnet/Docs/pull/7304.patch","issue_url":"https://api.github.com/repos/aspnet/Docs/issues/7304","number":7304,"state":"open","locked":false,"title":"version differences","user":{"login":"rachelappel","id":1857975,"node_id":"MDQ6VXNlcjE4NTc5NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/1857975?v=4","gravatar_id":"","url":"https://api.github.com/users/rachelappel","html_url":"https://github.com/rachelappel","followers_url":"https://api.github.com/users/rachelappel/followers","following_url":"https://api.github.com/users/rachelappel/following{/other_user}","gists_url":"https://api.github.com/users/rachelappel/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelappel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelappel/subscriptions","organizations_url":"https://api.github.com/users/rachelappel/orgs","repos_url":"https://api.github.com/users/rachelappel/repos","events_url":"https://api.github.com/users/rachelappel/events{/privacy}","received_events_url":"https://api.github.com/users/rachelappel/received_events","type":"User","site_admin":false},"body":"Another PR because Github errors when I try to push branches to this. The PR was https://github.com/aspnet/Docs/pull/7198. It thinks I am missing work from master yet it says everything local is up to date. @anurse this has those last couple of changed you request in 7198.","created_at":"2018-06-26T17:00:50Z","updated_at":"2018-06-28T15:21:10Z","closed_at":null,"merged_at":null,"merge_commit_sha":"53261efc2231e85e4bcc2621cb1301867158f1b1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/aspnet/Docs/pulls/7304/commits","review_comments_url":"https://api.github.com/repos/aspnet/Docs/pulls/7304/comments","review_comment_url":"https://api.github.com/repos/aspnet/Docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/aspnet/Docs/issues/7304/comments","statuses_url":"https://api.github.com/repos/aspnet/Docs/statuses/cd70488c662468a5c3107d53825505649e724c30","head":{"label":"rachelappel:rachelap/versions","ref":"rachelap/versions","sha":"cd70488c662468a5c3107d53825505649e724c30","user":{"login":"rachelappel","id":1857975,"node_id":"MDQ6VXNlcjE4NTc5NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/1857975?v=4","gravatar_id":"","url":"https://api.github.com/users/rachelappel","html_url":"https://github.com/rachelappel","followers_url":"https://api.github.com/users/rachelappel/followers","following_url":"https://api.github.com/users/rachelappel/following{/other_user}","gists_url":"https://api.github.com/users/rachelappel/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelappel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelappel/subscriptions","organizations_url":"https://api.github.com/users/rachelappel/orgs","repos_url":"https://api.github.com/users/rachelappel/repos","events_url":"https://api.github.com/users/rachelappel/events{/privacy}","received_events_url":"https://api.github.com/users/rachelappel/received_events","type":"User","site_admin":false},"repo":{"id":101670652,"node_id":"MDEwOlJlcG9zaXRvcnkxMDE2NzA2NTI=","name":"Docs","full_name":"rachelappel/Docs","owner":{"login":"rachelappel","id":1857975,"node_id":"MDQ6VXNlcjE4NTc5NzU=","avatar_url":"https://avatars2.githubusercontent.com/u/1857975?v=4","gravatar_id":"","url":"https://api.github.com/users/rachelappel","html_url":"https://github.com/rachelappel","followers_url":"https://api.github.com/users/rachelappel/followers","following_url":"https://api.github.com/users/rachelappel/following{/other_user}","gists_url":"https://api.github.com/users/rachelappel/gists{/gist_id}","starred_url":"https://api.github.com/users/rachelappel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rachelappel/subscriptions","organizations_url":"https://api.github.com/users/rachelappel/orgs","repos_url":"https://api.github.com/users/rachelappel/repos","events_url":"https://api.github.com/users/rachelappel/events{/privacy}","received_events_url":"https://api.github.com/users/rachelappel/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/rachelappel/Docs","description":"Documentation for ASP.NET and ASP.NET Core","fork":true,"url":"https://api.github.com/repos/rachelappel/Docs","forks_url":"https://api.github.com/repos/rachelappel/Docs/forks","keys_url":"https://api.github.com/repos/rachelappel/Docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rachelappel/Docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rachelappel/Docs/teams","hooks_url":"https://api.github.com/repos/rachelappel/Docs/hooks","issue_events_url":"https://api.github.com/repos/rachelappel/Docs/issues/events{/number}","events_url":"https://api.github.com/repos/rachelappel/Docs/events","assignees_url":"https://api.github.com/repos/rachelappel/Docs/assignees{/user}","branches_url":"https://api.github.com/repos/rachelappel/Docs/branches{/branch}","tags_url":"https://api.github.com/repos/rachelappel/Docs/tags","blobs_url":"https://api.github.com/repos/rachelappel/Docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rachelappel/Docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rachelappel/Docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/rachelappel/Docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rachelappel/Docs/statuses/{sha}","languages_url":"https://api.github.com/repos/rachelappel/Docs/languages","stargazers_url":"https://api.github.com/repos/rachelappel/Docs/stargazers","contributors_url":"https://api.github.com/repos/rachelappel/Docs/contributors","subscribers_url":"https://api.github.com/repos/rachelappel/Docs/subscribers","subscription_url":"https://api.github.com/repos/rachelappel/Docs/subscription","commits_url":"https://api.github.com/repos/rachelappel/Docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/rachelappel/Docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/rachelappel/Docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/rachelappel/Docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/rachelappel/Docs/contents/{+path}","compare_url":"https://api.github.com/repos/rachelappel/Docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rachelappel/Docs/merges","archive_url":"https://api.github.com/repos/rachelappel/Docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rachelappel/Docs/downloads","issues_url":"https://api.github.com/repos/rachelappel/Docs/issues{/number}","pulls_url":"https://api.github.com/repos/rachelappel/Docs/pulls{/number}","milestones_url":"https://api.github.com/repos/rachelappel/Docs/milestones{/number}","notifications_url":"https://api.github.com/repos/rachelappel/Docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rachelappel/Docs/labels{/name}","releases_url":"https://api.github.com/repos/rachelappel/Docs/releases{/id}","deployments_url":"https://api.github.com/repos/rachelappel/Docs/deployments","created_at":"2017-08-28T17:47:34Z","updated_at":"2018-06-26T15:32:04Z","pushed_at":"2018-06-27T21:13:54Z","git_url":"git://github.com/rachelappel/Docs.git","ssh_url":"git@github.com:rachelappel/Docs.git","clone_url":"https://github.com/rachelappel/Docs.git","svn_url":"https://github.com/rachelappel/Docs","homepage":"https://docs.microsoft.com/aspnet","size":651314,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"aspnet:master","ref":"master","sha":"f3c89a1e54e05764d1d854a3b5c1038c28d8f0a1","user":{"login":"aspnet","id":6476660,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY0NzY2NjA=","avatar_url":"https://avatars3.githubusercontent.com/u/6476660?v=4","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"repo":{"id":28239455,"node_id":"MDEwOlJlcG9zaXRvcnkyODIzOTQ1NQ==","name":"Docs","full_name":"aspnet/Docs","owner":{"login":"aspnet","id":6476660,"node_id":"MDEyOk9yZ2FuaXphdGlvbjY0NzY2NjA=","avatar_url":"https://avatars3.githubusercontent.com/u/6476660?v=4","gravatar_id":"","url":"https://api.github.com/users/aspnet","html_url":"https://github.com/aspnet","followers_url":"https://api.github.com/users/aspnet/followers","following_url":"https://api.github.com/users/aspnet/following{/other_user}","gists_url":"https://api.github.com/users/aspnet/gists{/gist_id}","starred_url":"https://api.github.com/users/aspnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aspnet/subscriptions","organizations_url":"https://api.github.com/users/aspnet/orgs","repos_url":"https://api.github.com/users/aspnet/repos","events_url":"https://api.github.com/users/aspnet/events{/privacy}","received_events_url":"https://api.github.com/users/aspnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/aspnet/Docs","description":"Documentation for ASP.NET and ASP.NET Core","fork":false,"url":"https://api.github.com/repos/aspnet/Docs","forks_url":"https://api.github.com/repos/aspnet/Docs/forks","keys_url":"https://api.github.com/repos/aspnet/Docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aspnet/Docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aspnet/Docs/teams","hooks_url":"https://api.github.com/repos/aspnet/Docs/hooks","issue_events_url":"https://api.github.com/repos/aspnet/Docs/issues/events{/number}","events_url":"https://api.github.com/repos/aspnet/Docs/events","assignees_url":"https://api.github.com/repos/aspnet/Docs/assignees{/user}","branches_url":"https://api.github.com/repos/aspnet/Docs/branches{/branch}","tags_url":"https://api.github.com/repos/aspnet/Docs/tags","blobs_url":"https://api.github.com/repos/aspnet/Docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aspnet/Docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aspnet/Docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/aspnet/Docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aspnet/Docs/statuses/{sha}","languages_url":"https://api.github.com/repos/aspnet/Docs/languages","stargazers_url":"https://api.github.com/repos/aspnet/Docs/stargazers","contributors_url":"https://api.github.com/repos/aspnet/Docs/contributors","subscribers_url":"https://api.github.com/repos/aspnet/Docs/subscribers","subscription_url":"https://api.github.com/repos/aspnet/Docs/subscription","commits_url":"https://api.github.com/repos/aspnet/Docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/aspnet/Docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/aspnet/Docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/aspnet/Docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/aspnet/Docs/contents/{+path}","compare_url":"https://api.github.com/repos/aspnet/Docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aspnet/Docs/merges","archive_url":"https://api.github.com/repos/aspnet/Docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aspnet/Docs/downloads","issues_url":"https://api.github.com/repos/aspnet/Docs/issues{/number}","pulls_url":"https://api.github.com/repos/aspnet/Docs/pulls{/number}","milestones_url":"https://api.github.com/repos/aspnet/Docs/milestones{/number}","notifications_url":"https://api.github.com/repos/aspnet/Docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aspnet/Docs/labels{/name}","releases_url":"https://api.github.com/repos/aspnet/Docs/releases{/id}","deployments_url":"https://api.github.com/repos/aspnet/Docs/deployments","created_at":"2014-12-19T17:38:02Z","updated_at":"2018-06-28T14:54:05Z","pushed_at":"2018-06-28T14:53:50Z","git_url":"git://github.com/aspnet/Docs.git","ssh_url":"git@github.com:aspnet/Docs.git","clone_url":"https://github.com/aspnet/Docs.git","svn_url":"https://github.com/aspnet/Docs","homepage":"https://docs.microsoft.com/aspnet","size":652518,"stargazers_count":2988,"watchers_count":2988,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":7497,"mirror_url":null,"archived":false,"open_issues_count":441,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":7497,"open_issues":441,"watchers":2988,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/7304"},"html":{"href":"https://github.com/aspnet/Docs/pull/7304"},"issue":{"href":"https://api.github.com/repos/aspnet/Docs/issues/7304"},"comments":{"href":"https://api.github.com/repos/aspnet/Docs/issues/7304/comments"},"review_comments":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/7304/comments"},"review_comment":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/aspnet/Docs/pulls/7304/commits"},"statuses":{"href":"https://api.github.com/repos/aspnet/Docs/statuses/cd70488c662468a5c3107d53825505649e724c30"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"rachelappel"}}