我在
ASP.Net Core使用
SignalR 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(); } } }
有人可以帮忙吗?
解决方法
SignalROptions有一个Transports属性
您可以像这样设置SignalR中间件:
您可以像这样设置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 }));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。