我在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);
}
}
我已经在3台不同的PC上部署了这个Windows服务,它可以在两台PC上正常工作,但另一方面,当我尝试浏览http://localhost:8080/signalr/hubs
在所有3台PC上执行代码时,不会抛出任何异常。
我已经在添加/删除Windows功能中检查了IIS的功能,它们都是一样的。
我错过了什么?
答案 0 :(得分:36)
我能够通过以下设置在本地重现:
http://localhost:8080/
WebApp.Start<Startup>("http://*:8080")
http://localhost:8080/
Http.Sys接受传入的请求,检查主机头,判断是否存在localhost:8080的预留,但是意识到没有应用程序正在侦听localhost:8080,只有*:8080。 Http.Sys然后返回503。
解决方案:
WebApp.Start<Startup>("http://+:8080")
答案 1 :(得分:9)
我也有同样的问题。我通过改变
来纠正它 const string url = "http://*:8080";
要
const string url = "http://+:8080"; // * replaced by +
答案 2 :(得分:1)
我也意识到,在其中一台PC中,端口8080正在使用中。
从
更改端口const string url = "http://*:8080";
到
const string url = "http://*:8088";
解决了问题