假设您实际上想要查看index.html
(即您的问题不是“显示空 index.html 而不是我的聊天页面 chat.html”),那么听起来当您在聊天页面中输入内容时它没有显示为连接到聊天的其他浏览器窗口中的聊天。
我会尝试一些基本测试。我将假设:
- ASP.NET 已在服务器上安装和配置(如果没有,请参阅脚注)
- SignalR 库部署到服务器(
Microsoft.AspNet.SignalR.Core.dll
、Microsoft.AspNet.SignalR.Owin.dll
和Microsoft.AspNet.SignalR.SystemWeb.dll
其他)。
我会尝试以下测试:
- 安装Fiddler,或使用浏览器开发工具中的 Network 选项卡(在浏览器中按 F12)。
- 浏览到
yourdomainnamehere.com/index.html
(如果您已经在那里,则重新加载)
- 网络跟踪应显示 200(或 304)状态:
- 你的页面
index.html
- 正在下载 jQuery、jQuery.signalR 的 javascript 文件
- 至关重要的是,它还应该显示以下返回状态为 200 的连接:
signalr/hubs
signalr/negotiate
(带有查询字符串)
- 它应该显示与
signalr/connect
(带有查询字符串)
所以:
- 如果您没有看到上面的 3.2,那么您知道没有提供 javascript 文件,因此您需要找出原因(它们是否在服务器上/您的 html 中的路径是否正确)。
如果你看到了,但不是上面的 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()
代码被调用。
好的,这行得通,现在呢?
现在您需要在 signalr 上打开客户端日志记录。在您看到该$.connection.hub.start().done(function () {
行的 index.html 聊天页面中,添加以下内容,以便代码显示为:
$.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'.
脚注:如何测试服务器上是否安装和配置了 ASP.NET
使用您的信号器端点网站,创建一个新页面:
- 使它成为一个 aspx 网络表单(或一个 mvc 表单)并调用它
TestAspNet.aspx
。
- 进入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。如果没有,那么有两种选择:
如果您认为另一个站点可能正在使用主机标头,那么您可以使用 powershell 在 Win Server 2102 上轻松检查:
Import-Module WebAdministration
Get-WebBinding |? bindingInformation -match .*mydomainname.com.* | ft protocol, bindingInformation, ItemXPath -AutoSize
站点名称和 ID 显示在结果列下方ItemXPath