我正在尝试将Signalr集成到我的Web表单项目中。
首先,使用掘金添加参考
我的创业班:
[assembly: OwinStartup(typeof(ns.App_Code.Startup))]
namespace ns
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
我的中心:
public class PositionHub : Hub
{
static ConcurrentDictionary<int, List<string>> connectedUsers = new ConcurrentDictionary<int, List<string>>();
public override Task OnConnected()
{
return base.OnConnected();
}
}
最后,客户端:
<script type="text/javascript" src="Scripts/jquery-2.2.4.min.js"></script>
<script src="Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src="<%= ResolveUrl("~/signalr/hubs") %>" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
var logger = $.connection.positionHub;
logger.start();
});
</script>
此外,将以下内容添加到web.config中:
<add key="owin:AutomaticAppStartup" value="true" />
和
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<modules runAllManagedModulesForAllRequests="true" />
当我运行应用程序时,它会显示404错误: GET http://localhost:41363/signalr/hubs 404(未找到)
这不是我第一次使用Signalr,但这是我第一次遇到此问题,并且努力解决了好几个小时,没有运气...
答案 0 :(得分:1)
我注意到您没有安装SignalR和Javascript所需的以下NuGet软件包。
Microsoft.AspNet.SignalR
该软件包提取了在ASP.NET应用程序中使用SignalR所需的服务器组件和 JavaScript客户端。
Microsoft.AspNet.SignalR.JS
ASP.NET SignalR的脚本客户端。
(上面的Microsoft.AspNet.SignalR自动包含了这个。)
编辑
通过下面的注释,我们发现OP的web.config
文件包含一些截获/signalr/hubs
URL的URL重写规则。
添加规则以防止该url被重写解决了问题。
<rule name="signalR" enabled="true" stopProcessing="true">
<match url="^signalr.*" /> <action type="None" />
</rule>
答案 1 :(得分:0)
修复启动类名称空间
namespace ns
成为
namespace TeltonikaSiteWebApplication.App_Code
答案 2 :(得分:0)
重写规则在Web配置上与它冲突,与Signalr冲突。我需要添加一个新的使其工作。 。感谢指导中的@pfx。