我正在尝试在Visual Studio 2012中构建一个SignalR应用程序。我的问题是它在Visual Studio调试(在Windows 7上使用Visual Studio 2012)下运行良好,但是当我尝试在Windows上的IIS 8上部署应用程序时在Server 2012中,该应用程序只执行index.html页面。
我决定尝试缩小问题是在我的代码中还是在SignalR中。我编译了http://www.asp.net/signalr/overview/getting-started/tutorial-getting-started-with-signalr所示的SignalR教程。这在Visual Studio下工作正常,但再一次,除了在IIS下显示静态页面之外,它不会做任何事情。
我尝试过这里列出的一些方法:Signalr/Hub not loading in IIS 7 but working correctly in Visual Studio,但它们似乎都不起作用。
答案 0 :(得分:26)
假设你真的想看index.html
(即你的问题不是“空的index.html显示而不是我的聊天页面chat.html”),那么听起来就像你输入的内容一样聊天页面没有显示为连接到聊天的其他浏览器窗口中的聊天。
我会尝试一些基本测试。我将假设:
Microsoft.AspNet.SignalR.Core.dll
,Microsoft.AspNet.SignalR.Owin.dll
,Microsoft.AspNet.SignalR.SystemWeb.dll
和其他人。)我会尝试以下测试:
yourdomainnamehere.com/index.html
(如果您已经在那里,则重新加载)index.html
signalr/hubs
signalr/negotiate
(带查询字符串)signalr/connect
(带查询字符串)所以:
如果您看到,但上面没有4.1,则说明ASP.NET路由存在问题。检查您是否在Application_Start
:
protected void Application_Start(object sender, EventArgs e)
{
// Register the default hubs route: ~/signalr/hubs
RouteTable.Routes.MapHubs();
}
如果你看到了,但不是4.2或5.1那么你的javascript就会出现问题,导致无法调用$.connection.hub.start()
代码。
现在您需要启用client side logging on signalr。在index.html聊天页面中,您可以看到$.connection.hub.start().done(function () {
行,添加以下代码,以便代码显示:
$.connection.hub.logging = true;
$.connection.hub.start().done(function () {`
再次打开浏览器开发工具,然后切换到控制台选项卡。现在加载页面并发送聊天。查看您获得的错误消息(如果有)。成功打开页面并发送聊天消息应该生成一个日志,例如:
LOG: [12:34:56 UTC+0100] SignalR: Negotiating with '/signalr/negotiate'.
LOG: [12:34:56 UTC+0100] SignalR: This browser doesn't support SSE.
LOG: [12:34:56 UTC+0100] SignalR: Binding to iframe's readystatechange event.
LOG: [12:34:56 UTC+0100] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000
LOG: [12:34:56 UTC+0100] SignalR: Triggering client hub event 'broadcastMessage' on hub 'ChatHub'.
使用您的信号器终端网站,创建一个新页面:
TestAspNet.aspx
。 <asp:Label runat="server" ID="lblTest"></asp:Label>
Page_Load
:this.lblTest.Text = DateTime.Now.ToLongTimeString();
现在将其部署到您的Web服务器,然后导航到http://yourdomainnamehere.com/TestAspNet.aspx
。如果这显示当前服务器时间,则您知道ASP.NET已安装在服务器上。如果没有,那么有两种选择:
yourdomainnamehere.com
如果您认为其他网站可能正在使用主机标头,那么您可以使用powershell在Win Server 2102上轻松检查:
Import-Module WebAdministration
Get-WebBinding |? bindingInformation -match .*mydomainname.com.* | ft protocol, bindingInformation, ItemXPath -AutoSize
网站名称和ID显示在结果列ItemXPath
答案 1 :(得分:1)
我有同样的问题。通过将应用程序池设置为ASP.NET v4.0(v4.0)进行排序。
我还必须使用Chrome而不是IE才能让演示应用正常运行。