【问题标题】:SignalR Self Host Disconnect TimeOut Without Global.asaxSignalR Self Host Disconnect TimeOut without Global.asax
【发布时间】:2015-01-05 23:38:39
【问题描述】:

我正在使用通过 OWIN 自托管的 SignalR 2.0。我正在尝试修改 SignalR ConnectionTimeout 属性,但它似乎不适用于 OWIN Startup 类。

当前尝试

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Cors;
using Owin;

namespace Test
{
    internal class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(10);
            app.UseCors(CorsOptions.AllowAll);
            app.MapSignalR();
        }
    }
}

我还尝试添加从另一个项目复制的我自己的Global.asax 文件。但是,我似乎无法解析 System.Web.HttpApplication 扩展。

using System;
using Microsoft.AspNet.SignalR;

namespace Test
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalHost.Configuration.ConnectionTimeout = TimeSpan.FromSeconds(10);
        }
    }
}

有什么建议可以解决这个问题吗?

文档链接:SignalR Configuration

【问题讨论】:

  • 你能扩展“它似乎不起作用”吗?它永远不会被调用吗?出错了吗?
  • @Noel,在 Startup.cs 中,它被调用但实际上似乎从未被应用,默认的 30 秒仍然存在。在 Global.asax 中,它实际上从未被调用过。

标签: c# asp.net signalr


【解决方案1】:

您需要在调用启动之前调用 GlobalHost。基本上,如果您的代码如下所示:

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;

namespace SignalRSelfHost
{
class Program
{
    static void Main(string[] args)
    {
        // This will *ONLY* bind to localhost, if you want to bind to all addresses
        // use http://*:8080 to bind to all addresses. 
        // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
        // for more information.
        string url = "http://localhost:8080";
        using (WebApp.Start(url))
        {
            Console.WriteLine("Server running on {0}", url);
            Console.ReadLine();
        }
    }
}
class Startup
{
    public void Configuration(IAppBuilder app)
    {
        GlobalHost.Configuration.ConnectionTimeout  =   new TimeSpan(0, 0, 110);
        GlobalHost.Configuration.DisconnectTimeout  =   new TimeSpan(0, 0, 60);
        GlobalHost.Configuration.KeepAlive          =   new TimeSpan(0, 0, 5);
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}
public class MyHub : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.addMessage(name, message);
    }
}
} 

应该是这样的:

using System;
using Microsoft.AspNet.SignalR;
using Microsoft.Owin.Hosting;
using Owin;
using Microsoft.Owin.Cors;

namespace SignalRSelfHost
{
class Program
{
    static void Main(string[] args)
    {
        // This will *ONLY* bind to localhost, if you want to bind to all addresses
        // use http://*:8080 to bind to all addresses. 
        // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
        // for more information.
        string url = "http://localhost:8080";
        GlobalHost.Configuration.ConnectionTimeout  =   new TimeSpan(0, 0, 110);
        GlobalHost.Configuration.DisconnectTimeout  =   new TimeSpan(0, 0, 60);
        GlobalHost.Configuration.KeepAlive          =   new TimeSpan(0, 0, 5);
        using (WebApp.Start(url))
        {
            Console.WriteLine("Server running on {0}", url);
            Console.ReadLine();
        }
    }
}
class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}
public class MyHub : Hub
{
    public void Send(string name, string message)
    {
        Clients.All.addMessage(name, message);
    }
}
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-22
    • 2011-11-03
    • 2016-09-20
    • 2016-02-02
    相关资源
    最近更新 更多