假设你真的想看index.html
(即您的问题不是“显示空的index.html而不是我的聊天页面chat.html”),那么听起来当您在聊天页面中输入某些内容时,它不会在其他浏览器窗口中显示为聊天已连接到聊天。
我会尝试一些基本测试。我假设:
- ASP.NET 已在服务器上安装并配置(如果没有,请参阅脚注)
- SignalR 库部署到服务器(
Microsoft.AspNet.SignalR.Core.dll
, Microsoft.AspNet.SignalR.Owin.dll
, Microsoft.AspNet.SignalR.SystemWeb.dll
和其他人)。
我会尝试以下测试:
- Install Fiddler,或使用浏览器开发工具中的“网络”选项卡(在浏览器中按 F12)。
- 浏览至
yourdomainnamehere.com/index.html
(或者如果您已经在那里则重新加载)
- The network trace should show 200 (or maybe 304) status for:
- 您的页面
index.html
- 正在下载 jQuery、jQuery.signalR 的 javascript 文件
- It should also show, crucially, the following connections with a 200 return status:
signalr/hubs
-
signalr/negotiate
(带有查询字符串)
- And it should show an ongoing connection to
-
signalr/connect
(带有查询字符串)
So:
- 如果您没有看到上面的 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()
被调用的代码。
好吧,这行得通,现在怎么办?
现在你需要打开客户端登录信号器。在您的 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'.
脚注:如何测试服务器上是否安装并配置了 ASP.NET
使用您的信号器端点网站,创建一个新页面:
- 使其成为 aspx web 表单(或 mvc 表单)并调用它
TestAspNet.aspx
.
- 进入TestAspNet.aspx,添加标签控件
<asp:Label runat="server" ID="lblTest"></asp:Label>
- 到后面的代码中,添加这段代码
Page_Load
: this.lblTest.Text = DateTime.Now.ToLongTimeString();
现在将其部署到您的网络服务器,然后导航到http://yourdomainnamehere.com/TestAspNet.aspx
。如果这显示了当前服务器时间,则您知道服务器上安装了 ASP.NET。如果没有,那么有两个选择:
- 服务器上的另一个网站正在使用主机标头
yourdomainnamehere.com
- 您需要在服务器上安装 ASP.NET。为此,请查看 technet 文章“在 IIS 上构建 ASP.NET 网站”,特别是“第 1 步:安装 IIS 和 ASP.NET 模块”
如果您认为另一个站点可能正在使用主机标头,那么您可以使用 powershell 在 Win Server 2102 上轻松检查这一点:
Import-Module WebAdministration
Get-WebBinding |? bindingInformation -match .*mydomainname.com.* | ft protocol, bindingInformation, ItemXPath -AutoSize
站点名称和 id 显示在结果列下方ItemXPath