Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change Global Settings Config in SignalR Core

I am using SignalR Core with ASP.Net Core.

I want to override GlobalHost settings for signalR.

I am getting this-

protected void Application_Start(object sender, EventArgs e)
{
    // Make long polling connections wait a maximum of 110 seconds for a
    // response. When that time expires, trigger a timeout command and
    // make the client reconnect.
    GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(110);

    // Wait a maximum of 30 seconds after a transport connection is lost
    // before raising the Disconnected event to terminate the SignalR connection.
    GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(30);

    // For transports other than long polling, send a keepalive packet every
    // 10 seconds. 
    // This value must be no more than 1/3 of the DisconnectTimeout value.
    GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(10);

    RouteTable.Routes.MapHubs();
}

But I can't configure it with my application.

It is on ASP.Net Core v1.0.

My Startup.cs is like this-

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Cors.Infrastructure;
using Microsoft.AspNetCore.Hosting;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace McpSmyrilLine
{
    public class Startup
    {
        public Startup(IHostingEnvironment env)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(env.ContentRootPath)
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
                .AddEnvironmentVariables();

            if (env.IsDevelopment())
            {
                // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
                builder.AddApplicationInsightsSettings(developerMode: true);
            }
            Configuration = builder.Build();

        }

        public IConfigurationRoot Configuration { get; }

        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
        {
            // Add framework services.
            services.AddApplicationInsightsTelemetry(Configuration);
            //Add DB Context
            var connectionStringBuilder = new Microsoft.Data.Sqlite.SqliteConnectionStringBuilder { DataSource = "mcp.db" };
            var connectionString = connectionStringBuilder.ToString();

            ///////////////Add Cors
            var corsBuilder = new CorsPolicyBuilder();
            corsBuilder.AllowAnyHeader();
            corsBuilder.AllowAnyMethod();
            corsBuilder.AllowAnyOrigin();
            corsBuilder.AllowCredentials();

            services.AddCors(options =>
            {
                options.AddPolicy("AllowAll", corsBuilder.Build());
            });
            ///////////////End Cors

            services.AddDbContext<McpDbContext>(options =>
                options.UseSqlite(connectionString));

            services.AddMvc();
            services.AddSignalR(options => { options.Hubs.EnableDetailedErrors = true; });
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
        {
            loggerFactory.AddConsole(Configuration.GetSection("Logging"));
            loggerFactory.AddDebug();

            //Configure Cors
            app.UseCors("AllowAll");

            app.UseSignalR();

            app.UseApplicationInsightsRequestTelemetry();

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseBrowserLink();
                //Adding Seeder Data
                AddTestData(app.ApplicationServices.GetService<McpDbContext>());
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseApplicationInsightsExceptionTelemetry();

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }

        private static void AddTestData(McpDbContext context)
        {
            //var testUser1 = new DbModels.Try.User
            //{
            //    Id = "abc123",
            //    FirstName = "Luke",
            //    LastName = "Skywalker"
            //};

            //context.Users.Add(testUser1);

            //var testPost1 = new DbModels.Try.Post
            //{
            //    Id = "def234",
            //    UserId = testUser1.Id,
            //    Content = "What a piece of junk!"
            //};

            //context.Posts.Add(testPost1);

            //context.SaveChanges();
        }
    }
}

Can anyone please help?

like image 370
Abrar Jahin Avatar asked Aug 30 '16 06:08

Abrar Jahin


People also ask

Is SignalR deprecated?

SignalR is deprecated. May I know the latest package for the same. The package Microsoft. AspNetCore.

How many connections can SignalR handle?

In the default mode, the app server creates five server connections with Azure SignalR Service. The app server uses the Azure SignalR Service SDK by default. In the following performance test results, server connections are increased to 15 (or more for broadcasting and sending a message to a big group).

Is SignalR full duplex?

SignalR supports full duplex communication that allows the client and server to transfer data back and forth.


1 Answers

There's a Transports property in SignalROptions
You can setup the SignalR middleware like this :

services.AddSignalR(options => {
                options.Hubs.EnableDetailedErrors = true;
                var transports = options.Transports;
                transports.DisconnectTimeout = TimeSpan.FromSeconds(30);
                transports.KeepAlive = TimeSpan.FromSeconds(10);
                transports.TransportConnectTimeout = TimeSpan.FromSeconds(110);
            });

UPDATE alpha2-final

Transport options can be configured throught MapHub:

app.UseSignalR(configure =>
{
    configure.MapHub<Hub>("hub", options => 
    {
        options.Transports = TransportType.All;
        options.LongPolling.PollTimeout = TimeSpan.FromSeconds(10);
        options.WebSockets.CloseTimeout = TimeSpan.FromSeconds(10);
    });
})

and on client side:

let logger: ILogger;
let transportType: TransportType;
const hubConnetion = new HubConnection(
  new HttpConnection(
      url,
      { 
        transport: transportType,
        logging: logger
      }));
like image 79
agua from mars Avatar answered Oct 05 '22 08:10

agua from mars