尝试浏览信号器/集线器时,HTTP 503服务不可用

Nul*_*nce 17 .net c# windows-services signalr

我在VS2012中创建了一个Windows托管的SignalR集线器:

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        app.UseCors(CorsOptions.AllowAll);
        app.MapSignalR();
    }
}

public static class SignalR
{
    public static void Start()
    {
        const string url = "http://*:8080";
        WebApp.Start<Startup>(url);
    }
}

 public class Broadcaster : Hub
    {

        public void SendDownloadResult(bool result, string device, string description, string connectionId, string task)
        {
            var context = GlobalHost.ConnectionManager.GetHubContext<Broadcaster>();
            context.Clients.Client(connectionId).sendDownloadResult(result, device, description, task);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我已经在3台不同的PC上部署了这个Windows服务,它可以在两台PC上正常工作,但另一方面,当我尝试浏览时,我得到HTTP 503服务不可用 http://localhost:8080/signalr/hubs

在所有3台PC上执行代码时不会抛出异常.

我已经在添加/删除Windows功能中检查了IIS的功能,它们都是一样的.

我错过了什么?

Tra*_*her 37

我能够通过以下设置在本地重现:

  1. 使用NetSh.exe或类似工具保留 http://localhost:8080/
  2. 呼叫 WebApp.Start<Startup>("http://*:8080")
  3. 浏览到 http://localhost:8080/

会发生什么事情是Http.Sys接受传入的请求,检查主机头,确定有localhost:8080的预留,但意识到没有应用程序正在侦听localhost:8080,只有*:8080.Http.Sys然后返回503.

解决方案:

  1. 尝试 WebApp.Start<Startup>("http://+:8080")
  2. 删除Http.Sys/NetSh注册

  • 从管理员提示符执行`netsh http delete urlacl url = http:// localhost:8080 /`应该可以解决问题. (3认同)

Ris*_*hak 9

我也有同样的问题.我通过改变纠正了它

 const string url = "http://*:8080";
Run Code Online (Sandbox Code Playgroud)

 const string url = "http://+:8080"; // * replaced by +
Run Code Online (Sandbox Code Playgroud)