iis - SignalR 应用程序在 IIS 下不起作用

标签 iis signalr iis-8 windows-server-2012

我正在尝试在 Visual Studio 2012 中构建 SignalR 应用程序。我的问题是它在 Visual Studio 调试下运行良好(在 Windows 7 上使用 Visual Studio 2012),但是当我尝试在 Windows Server 2012 上的 IIS 8 上部署应用程序时,该应用程序仅显示 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 ,但它们似乎都不起作用。

最佳答案

假设你真的想看 index.html (即您的问题不是“显示的是空的 index.html 而不是我的聊天页面 chat.html”),那么听起来当您在聊天页面中输入内容时,它不会在其他浏览器窗口中显示为聊天已连接到聊天。

我会尝试一些基本的测试。我将假设:

  • 在服务器上安装并配置了 ASP.NET(如果没有,请参阅脚注)
  • SignalR 库部署到服务器( Microsoft.AspNet.SignalR.Core.dllMicrosoft.AspNet.SignalR.Owin.dllMicrosoft.AspNet.SignalR.SystemWeb.dll 和其他)。

  • 我会尝试以下测试:
  • 安装 Fiddler ,或使用浏览器开发工具中的网络选项卡(在浏览器中按 F12)。
  • 浏览到 yourdomainnamehere.com/index.html (如果您已经在那里,则重新加载它)
  • 网络跟踪应显示 200(或可能是 304)状态:
  • 您的页面 index.html
  • jQuery 的 javascript 文件,jQuery.signalR 正在下载
  • 重要的是,它还应该显示以下具有 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()被调用的代码。

  • 好的,这有效,现在呢?

    现在你需要开启 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'. 
    

    脚注:如何测试服务器上是否安装并配置了 ASP.NET

    使用您的 signalr 端点网站,创建一个新页面:
  • 将其设为 aspx Web 表单(或 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。如果没有,那么有两种选择:
  • 服务器上的另一个网站正在使用主机头 yourdomainnamehere.com
  • 您需要在服务器上安装 ASP.NET。为此,请查看 technet 文章 "Build an ASP.NET Website on IIS" ,尤其是 "Step 1: Install IIS and ASP.NET Modules"

  • 如果您认为另一个站点可能正在使用主机 header ,那么您可以使用 powershell 在 Win Server 2102 上轻松检查:

    Import-Module WebAdministration
    Get-WebBinding |? bindingInformation -match .*mydomainname.com.* | ft protocol, bindingInformation, ItemXPath -AutoSize
    

    站点名称和 id 显示在结果列 ItemXPath

    关于iis - SignalR 应用程序在 IIS 下不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16900536/

    相关文章:

    iis - 如何以编程方式重置 IIS?

    c# - $.connections 无法读取未定义的集线器 (SignalR)

    wcf - "WebSocket upgrade request failed"异常在 Web 套接字上下文中是什么意思?

    error-handling - coldfusion 10-自定义处理时隐藏状态码

    asp.net-mvc - 为 Windows XP 创建独立的 ASP.NET MVC 应用程序

    visual-studio - 在 http ://localhost/创建虚拟目录

    asp.net-mvc - 使用signalr时,IIS会有连接限制吗

    asp-classic - 如何防止 Outlook.office.com 在电子邮件中显示消息源

    .net - linq to sql 能否在 asp.net 2.0 Web 应用程序中工作?

    c# - SignalR 连接问题 - 连接监听器无法接受任何新连接