服务器端无法与客户端通信时遇到麻烦。从客户端发送数据后,我就会在后端接收数据,但是,反之亦然(将数据发送回客户端时),反之亦然。
我的项目设置:
使用框架4.6.2创建一个空的ASP.NET应用程序
已安装nuget软件包'Microsoft.AspNet.SignalR'v2.4.0
使用jQuery 3.3.1
添加了启动类并插入了“ app.MapSignalR();”进入 配置方法
添加了一种集线器,该集线器具有一种与来回通信的方法。 客户
添加了一个js文件,用于启动集线器并与 服务器
我尝试了以下操作,但未成功:
index.aspx:
<script src="/js/third_party/jquery-3.3.1.min.js"></script>
<script src="/js/third_party/jquery-ui.min.js"></script>
<script src="/js/third_party/jquery.signalR-2.4.0.min.js"></script>
<script src='/signalr/js'></script>
<script src="/js/client.js"></script>
client.js:
var conn = null;
$(function () {
$.connection.hub.stateChanged(connectionStateChanged);
$.connection.hub.start({ waitForPageLoad: false });
conn = $.connection.login;
function connectionStateChanged(state) {
switch (state.newState) {
case 1: // Connected
conn.server.announce('This is an announcement.'); // Works fine and sends the message
break;
}
}
// I'm using '.client', so there is no reason why this should not be triggered
conn.client.onAnnounce = function (message) {
alert(message); // Does NOT receive the message back
debugger;
}
Login.cs:
public class Login : Hub
{
public void Announce(string message)
{
// I receive the data here from the client... but it does not get sent back to the client
Clients.Caller.onAnnounce(message);
}
}
Startup.cs:
[assembly: OwinStartup(typeof(AutoPlayer.Startup))]
namespace SignalRTest
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR();
}
}
}
我希望服务器收到一条消息,服务器将同一条消息发送回客户端,并让客户端提醒该消息。
答案 0 :(得分:1)
经过数小时的尝试不同的尝试,这是由于以下代码行造成的:
$.connection.hub.start({ **waitForPageLoad: false** });
删除“ waitForPageLoad”设置,或将其设置为true即可解决。
“ waitForPageLoad-确定SignalR是否应等待页面完全加载以开始连接(默认为true)。”
我认为这是由于服务器调用回客户端时客户端JS文件没有完全加载('conn.client.onAnnounce'还不存在)。想通了,如果确实是这样,我会在控制台中看到JS错误...但我想不是。