SignalR应用程序在IIS下无法运行

时间:2013-06-03 15:37:34

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

我正在尝试在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,但它们似乎都不起作用。

2 个答案:

答案 0 :(得分:26)

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

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

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

我会尝试以下测试:

  1. 安装Fiddler,或使用浏览器开发工具中的“网络”标签(在浏览器中按F12)。
  2. 浏览yourdomainnamehere.com/index.html(如果您已经在那里,则重新加载)
  3. 网络跟踪应显示200(或可能是304)状态:
    1. 您的信息页index.html
    2. jQuery的javascript文件,jQuery.signalR正在下载
  4. 它还应该显示以下具有200返回状态的连接:
    1. signalr/hubs
    2. signalr/negotiate(带查询字符串)
  5. 它应该显示持续的联系
    1. signalr/connect(带查询字符串)
  6. 所以:

    • 如果你没有看到上面的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

    使用您的信号器终端网站,创建一个新页面:

    • 将其设为aspx Web表单(或mvc表单)并将其命名为TestAspNet.aspx
    • 进入TestAspNet.aspx,添加标签控件<asp:Label runat="server" ID="lblTest"></asp:Label>
    • 进入后面的代码,在Page_Loadthis.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

答案 1 :(得分:1)

我有同样的问题。通过将应用程序池设置为ASP.NET v4.0(v4.0)进行排序。

我还必须使用Chrome而不是IE才能让演示应用正常运行。