我正在尝试在IIS上部署SignalR站点。代码一切正常VS.但是到目前为止我尝试解决信号器/集线器时出现 404 not found 错误。
1)将脚本改为:
script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
2)修改Web.Config以包括:
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true">
</modules>
</system.webServer>
3)在IIS上更改UrlMappingsModule
的调用请求。
4)添加SignalR.Hosting.AspNet.dll
以查看是否有帮助。
不确定还有什么可以尝试或检查,任何帮助或指向正确的方向?
答案 0 :(得分:30)
路线登记的顺序很重要。我有这个确切的问题并通过确保我的global.asax.cs看起来像这样修复它:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteTable.Routes.MapHubs();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}
这是在一个使用SignalR,MVC和WebApi的网站上。
答案 1 :(得分:17)
这个404错误的原因是没有映射集线器,以前必须按照SimonF的回答完成。如果您使用SignalR版本2 RouteTable.Routes.MapHubs();
现已过时。对于映射集线器,您可以创建如下的启动类。
[assembly: OwinStartup(typeof(WebApplication1.Startup))]
namespace WebApplication1
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
app.MapSignalR();
}
}
}
referenace:http://www.asp.net/signalr/overview/releases/upgrading-signalr-1x-projects-to-20
答案 2 :(得分:11)
尝试将通配符应用程序映射添加到服务器,以帮助在脚本URL“〜/ signalr / hubs”中映射未知扩展名
答案 3 :(得分:6)
如果您正在处理网络表单,请执行以下步骤
在webconfig中:
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true"/>
在页面中添加对hub的引用
<script src="/signalr/signalr/hubs"></script>
而不是
<script src="/signalr/hubs"></script>
答案 4 :(得分:3)
我可以通过将web.config中的以下appSetting更改为“true”来修复〜/ signalr / hubs上的404。
{{1}}
答案 5 :(得分:1)
确保您网站的AppPool定位到正确版本的.NET Framework。
答案 6 :(得分:1)
我可能会有点迟到,但希望它有所帮助。 确保此代码在开始时运行。
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
RouteTable.Routes.MapHubs()
End Sub
因为我在我的应用程序中添加了一个global.asax,然后是一个代码隐藏,但是将它放在Global.asax文件中
<%@ Application Language="VB" CodeBehind = "Global.asax.vb" %> /*This was wrong*/
因此,当我尝试运行应用程序时,我的global.asax中的Application_Start没有初始化集线器。这就是它无法解决信号器/集线器的原因
在我的Global.asax
中修复了这个问题 <%@ Application Inherits="_Global" Language="VB" %>
这在我的Global.asax.vb中:
Public Class _Global
Inherits System.Web.HttpApplication
答案 7 :(得分:0)
我在MVC3中没有路由问题,但确实错了路径。我建议您查看源代码并查看脚本实际指向的位置,确保它正在解析应用程序目录。并确保您可以使用浏览器以正确的路径在物理上打开文件。例如。
<script src="/MyWebApp/signalr/hubs" type="text/javascript"></script>
您可以从浏览器打开文件(将其替换为正确的子目录)吗?
如果没有,集线器可能设置不正确,可能会指向正确的方向。小提琴吧。
我使用的语法是:
<script src="@Url.Content("~/signalr/hubs")" type="text/javascript"></script>
之间的差异
答案 8 :(得分:0)
我在IIS版本上遇到类似的问题,我通过重启AppPool修复它,重新启动web并立即开始工作。
答案 9 :(得分:0)
这个404可能有很多原因 -
可以找到一些常见的原因答案 10 :(得分:0)
对我来说,解决方案是reinstall
所有包裹并恢复所有依赖。
打开nuget powershell
并使用此命令。
Update-Package -Reinstall
答案 11 :(得分:0)
我有同样的问题,它是一个使用signalR的asp.net项目,它在我发布之前正常工作但是当我在IIS中托管它时,它没有。
在我检查后,我意识到地址/信号器/集线器不正确,让我解释一下,只需执行以下步骤:
在浏览器中打开您的Web应用程序(使用IIS),您会看到您设计的界面,是吗?现在按ctrl+U
或右键单击页面,选择查看页面源。
您会在页面顶部看到以<script>
标记开头的多个链接,现在点击<script src="/signalr/hubs"></script>
,点击它,如果您被带到涉及&#的页面34; 404 - 找不到文件或目录。&#34;您在定义地址时遇到一些错误,找到真实地址并更改地址栏中的地址以观察真实结果
在我的情况下,我需要在地址的开头添加我的项目名称,所以我不得不更改地址:
<script src="/signalr/hubs"></script>
到
<script src="/MoveShape/signalr/hubs"></script>
其中MoveShape是我的项目名称,现在在浏览器中按ctrl+U
并按照之前告知的步骤后,单击链接,这次您看到真实结果,页面显示代码以:< / p>
/*!
* ASP.NET SignalR JavaScript Library v2.2.2
* http://signalr.net/
*
* Copyright (c) .NET Foundation. All rights reserved.
* Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
*
*/
是啊!这就是它,它工作正常,请记住,当我使用Visual Studio测试它时没有问题,但在IIS中托管之后没有问题,因为其他人建议通过应用<%= ResolveUrl("~/") %>
或者其他方法。
答案 12 :(得分:0)
就我而言,我失去了一些 owin依赖,然后我收到了404 NotFound 错误。
当我添加以下依赖项时,我会从期望的URL中清楚地检索代理javascript文件。像URL:1111 / singlar / hubs
- Microsoft.Owin
- Microsoft.Owin.Core
- Microsoft.Owin.Host.SystemWeb
- Microsoft.Owin.Security
- Owin
希望答案可以帮到某人。
答案 13 :(得分:0)
检查web.config,在段AppSettings上添加
<add key="owin:AutomaticAppStartup " value="false" />
on键必须在名称键的末尾是空白,例如@Randy H。