diff --git a/eng/Dependencies.props b/eng/Dependencies.props
index 2e11857b1b..097673484f 100644
--- a/eng/Dependencies.props
+++ b/eng/Dependencies.props
@@ -23,6 +23,7 @@ and are generated based on the last package release.
+
diff --git a/eng/Versions.props b/eng/Versions.props
index c27a506f32..ff8bc1a52c 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -206,6 +206,7 @@
2.3.2
10.0.1
15.8.166
+ 1.2.0
15.8.166
1.2.6
15.8.166
diff --git a/src/SignalR/perf/benchmarkapps/Crankier/Commands/ServerCommand.cs b/src/SignalR/perf/benchmarkapps/Crankier/Commands/ServerCommand.cs
index cb1ef585b6..738d3232fd 100644
--- a/src/SignalR/perf/benchmarkapps/Crankier/Commands/ServerCommand.cs
+++ b/src/SignalR/perf/benchmarkapps/Crankier/Commands/ServerCommand.cs
@@ -11,6 +11,7 @@ using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.SignalR.Crankier.Server;
+using System.Collections.Generic;
namespace Microsoft.AspNetCore.SignalR.Crankier.Commands
{
@@ -21,6 +22,7 @@ namespace Microsoft.AspNetCore.SignalR.Crankier.Commands
app.Command("server", cmd =>
{
var logLevelOption = cmd.Option("--log ", "The LogLevel to use.", CommandOptionType.SingleValue);
+ var azureSignalRConnectionString = cmd.Option("--azure-signalr-connectionstring ", "Azure SignalR Connection string to use", CommandOptionType.SingleValue);
cmd.OnExecute(() =>
{
@@ -30,18 +32,31 @@ namespace Microsoft.AspNetCore.SignalR.Crankier.Commands
{
return InvalidArg(logLevelOption);
}
- return Execute(logLevel);
+
+ if (azureSignalRConnectionString.HasValue() && string.IsNullOrWhiteSpace(azureSignalRConnectionString.Value()))
+ {
+ return InvalidArg(azureSignalRConnectionString);
+ }
+
+ return Execute(logLevel, azureSignalRConnectionString.Value());
});
});
}
- private static int Execute(LogLevel logLevel)
+ private static int Execute(LogLevel logLevel, string azureSignalRConnectionString)
{
Console.WriteLine($"Process ID: {Process.GetCurrentProcess().Id}");
- var config = new ConfigurationBuilder()
- .AddEnvironmentVariables(prefix: "ASPNETCORE_")
- .Build();
+ var configBuilder = new ConfigurationBuilder()
+ .AddEnvironmentVariables(prefix: "ASPNETCORE_");
+
+ if (azureSignalRConnectionString != null)
+ {
+ configBuilder.AddInMemoryCollection(new [] { new KeyValuePair("Azure:SignalR:ConnectionString", azureSignalRConnectionString) });
+ Console.WriteLine("Using Azure SignalR");
+ }
+
+ var config = configBuilder.Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
diff --git a/src/SignalR/perf/benchmarkapps/Crankier/Crankier.csproj b/src/SignalR/perf/benchmarkapps/Crankier/Crankier.csproj
index 1bc1e98bd6..23ae6b0027 100644
--- a/src/SignalR/perf/benchmarkapps/Crankier/Crankier.csproj
+++ b/src/SignalR/perf/benchmarkapps/Crankier/Crankier.csproj
@@ -4,6 +4,7 @@
Exe
$(DefaultNetCoreTargetFramework)
Microsoft.AspNetCore.SignalR.CranksRevenge
+ true
@@ -15,6 +16,7 @@
+
diff --git a/src/SignalR/perf/benchmarkapps/Crankier/Readme.md b/src/SignalR/perf/benchmarkapps/Crankier/Readme.md
index 7b0a95fbe9..dc783bcc9e 100644
--- a/src/SignalR/perf/benchmarkapps/Crankier/Readme.md
+++ b/src/SignalR/perf/benchmarkapps/Crankier/Readme.md
@@ -14,7 +14,9 @@ The `server` command runs a web host exposing a single SignalR `Hub` endpoint on
Usage: server [options]
Options:
- --log The LogLevel to use.
+ --log The LogLevel to use.
+ --azure-signalr-connectionstring Azure SignalR Connection string to use
+
```
Notes:
@@ -55,6 +57,12 @@ Run the server:
dotnet run -- server
```
+Run the server using Azure SignalR:
+
+```
+dotnet run -- server --azure-signalr-connectionstring Endpoint=https://your-url.service.signalr.net;AccessKey=yourAccessKey;Version=1.0;
+```
+
Attempt to make 10,000 connections to the server using WebSockets and 10 workers:
```
diff --git a/src/SignalR/perf/benchmarkapps/Crankier/Server/Startup.cs b/src/SignalR/perf/benchmarkapps/Crankier/Server/Startup.cs
index d8d5efc5bf..6b3154416c 100644
--- a/src/SignalR/perf/benchmarkapps/Crankier/Server/Startup.cs
+++ b/src/SignalR/perf/benchmarkapps/Crankier/Server/Startup.cs
@@ -1,6 +1,7 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
+using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
@@ -11,15 +12,23 @@ namespace Microsoft.AspNetCore.SignalR.Crankier.Server
public class Startup
{
private readonly IConfiguration _config;
+ private readonly string _azureSignalrConnectionString;
public Startup(IConfiguration configuration)
{
_config = configuration;
+ _azureSignalrConnectionString = configuration.GetSection("Azure:SignalR").GetValue("ConnectionString", null);
}
public void ConfigureServices(IServiceCollection services)
{
- var signalrBuilder = services.AddSignalR()
- .AddMessagePackProtocol();
+ var signalrBuilder = services.AddSignalR();
+
+ if (_azureSignalrConnectionString != null)
+ {
+ signalrBuilder.AddAzureSignalR();
+ }
+
+ signalrBuilder.AddMessagePackProtocol();
services.AddSingleton();
@@ -30,10 +39,19 @@ namespace Microsoft.AspNetCore.SignalR.Crankier.Server
{
app.UseRouting();
- app.UseEndpoints(endpoints =>
+ if (_azureSignalrConnectionString != null)
{
- endpoints.MapHub("/echo");
- });
+ app.UseAzureSignalR(routes => {
+ routes.MapHub("/echo");
+ });
+ }
+ else
+ {
+ app.UseEndpoints(endpoints =>
+ {
+ endpoints.MapHub("/echo");
+ });
+ }
}
}
}