使用SignalR时,信号器/集线器在Windows Server 2008 R2 SP1上出现404错误

时间:2014-07-29 14:35:54

标签: asp.net iis iis-7.5 signalr signalr-hub

我的开发机器是Visual Studio 2013,该项目是使用.NET 4和SignalR 1.2.1的ASP.NET。

该项目使用IIS Express和本地IIS,但不能在Windows Server 2008 R2 SP1上运行。

Windows Server 2008 R2 SP1已经安装了KB980368,因此我不必担心无扩展名网址。

页面出现,但按钮永远不会启用,因为信号器/集线器出现404错误。

I found this link但在404下尝试了一切,但仍然无法正常工作。 我还尝试了on this blogthis KB所有内容,但没有取得任何成功。

我还将我的本地Windows 7 IIS设置与服务器进行了比较,一切看起来都是正确的,所以我真的没有想法!

这是我的网络应用程序:

这是html:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
</head>
<body>
    <div>
        <p>Document Name</p>
        <input id="documentName" value="blah.pdf" />
        <button id="startDownload" disabled="disabled">Start Download</button>
        <p id="message"></p>
    </div>
    <asp:PlaceHolder runat="server">
        <script src="Scripts/jquery-1.6.4.js"></script>
        <script src="Scripts/json2.min.js"></script>
        <script src="<%: ResolveClientUrl("~/Scripts/jquery.signalR-1.2.1.js") %>"></script>
        <script src="signalr/hubs"></script>
        <script>
            $(function () {
                var download = $.connection.fileCreatedHub;

                $.connection.hub.start().done(function () {
                    $("#startDownload").click(function () {
                        var fileName = $("#documentName").val();
                        if (fileName.length === 0) {
                            alert('Must have document name.');
                        } else {
                            $('#startDownload').attr('disabled', true);
                            download.server.startDownload(fileName)
                                .fail(function (result) {
                                    alert(result);
                                });
                        }

                    });

                    $('#startDownload').removeAttr('disabled');
                }).fail(function () {
                    alert('Failed to connect!');
                });

                download.client.sendMessage = function (response) {
                    $('#startDownload').removeAttr('disabled');
                    $('#message').text(response);
                };
            });

        </script>
    </asp:PlaceHolder>
</body>
</html>

这是一个Global.asax.cs Application_Start

protected void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    RouteConfig.RegisterRoutes(RouteTable.Routes);
}

这是RouteConfig类

public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        RouteTable.Routes.MapHubs();
        routes.EnableFriendlyUrls();
    }
}

这是我的中心

[HubName("fileCreatedHub")]
public class FileCreatedHub : Hub
{
    public void StartDownload(string fileName)
    {
        var context = GlobalHost.ConnectionManager.GetHubContext<FileCreatedHub>();
        context.Clients.Client(Context.ConnectionId).sendMessage("Received " + fileName);
    }
}

编辑1
IE网络日志

URL Method  Result  Type    Received    Taken   Initiator   Wait‎‎  Start‎‎ Request‎‎   Response‎‎  Cache read‎‎    Gap‎‎
http://10.3.102.234/download2.aspx  GET 200 text/html   2.02 KB 2.41 s  refresh 0   47  2355    16  0   874
/signalr/hubs   GET 404 text/html   160 B   109 ms  <script>    2418    0   109 0   0   765
/Scripts/json2.min.js   GET 200 application/x-javascript    2.96 KB 203 ms  <script>    2418    0   156 47  0   671
/Scripts/jquery.signalR-1.2.1.js    GET 200 application/x-javascript    110.83 KB   0.65 s  <script>    2418    0   156 499 0   219
/Scripts/jquery-1.6.4.js    GET 200 application/x-javascript    232.84 KB   0.74 s  <script>    2418    0   109 640 0   125

编辑2 在查看IE网络流量后,我注意到IE正在请求/ signalr / hubs为text / html,

所以我改变了:

<script src="signalr/hubs"></script>

<script type="text/javascript" src="signalr/hubs"></script>

然而,它仍然以text / html的形式请求它,即使我查看它的来源是正确的。我想知道这可能是问题吗?

无论如何,提前感谢任何人的帮助!

0 个答案:

没有答案