【问题标题】:Change Global Settings Config in SignalR Core在 SignalR Core 中更改全局设置配置
【发布时间】:2016-08-30 06:18:26
【问题描述】:

我正在使用 SignalR CoreASP.Net Core

我想覆盖 signalR 的 GlobalHost 设置。

我收到 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();
}

但是我无法用我的应用程序配置它

它在 ASP.Net Core v1.0 上。

我的Startup.cs是这样的-

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();
        }
    }
}

有人可以帮忙吗?

【问题讨论】:

    标签: asp.net-mvc asp.net-core signalr asp.net-core-mvc signalr-hub


    【解决方案1】:

    SignalROptions 中有一个 Transports 属性
    您可以像这样设置 SignalR 中间件:

    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);
                });
    

    更新 alpha2-final

    可以通过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);
        });
    })
    

    在客户端:

    let logger: ILogger;
    let transportType: TransportType;
    const hubConnetion = new HubConnection(
      new HttpConnection(
          url,
          { 
            transport: transportType,
            logging: logger
          }));
    

    【讨论】:

    • 对于我自己的核心新手 - 此代码进入 Startup.cs 方法 ConfigureServices
    • 我在选项下没有集线器或传输。新版本是否缺少某些内容? (使用信号器 alpha2 final)
    • @aguafrommars 你摇滚!
    猜你喜欢
    • 2020-04-18
    • 2019-02-05
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    相关资源
    最近更新 更多