从客户端代码联系服务器上的方法
Contacting the method on the server from client code
我是第一次尝试使用 SignalR,想将它添加到我的项目中。
我现在的问题是无法从服务器获取消息。我收到此错误:
TypeError: signalRhub.Test is not a function
我对脚本的引用是这样的(这似乎有效):
<script src="~/Scripts/jquery.signalR-2.3.0.js"></script>
<script src="~/Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src='~/signalr/js'></script>
这是我的客户端代码:
<script>
$(function () {
var signalRhub = $.connection.hubSignalR;
console.log(signalRhub);
//Start connection
$.connection.hub.start(function () {
signalRhub.Test(function (response) {
alert("Response from server: " + response);
//$("#testDiv").html(response);
});
});
});
</script>
这是我的服务器 class 定义,以及我试图调用的方法(无法找到):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace AuthSys.SignalRhub
{
public class HubSignalR : Hub
{
public string Test()
{
return "Success from server";
}
}
}
-------------------- 附加信息----------------
我附上了我的 Firefox 控制台的屏幕截图。在我的客户端代码中,您会注意到这段代码:
console.log(signalRhub);
这就是您在 Firefox 控制台中看到的内容。查看名为connection
的子项,似乎已建立连接。在这里,您可以看到它生成的 URL 等。查看 server
child(扩展了 2 个级别),它似乎找到了服务器上的 Test()
方法。
我的 Startup.cs 看起来像这样(如果重要的话):
using Microsoft.Owin;
using Owin;
[assembly: OwinStartupAttribute(typeof(AuthSys.Startup))]
namespace AuthSys
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
}
}
}
有人知道我的问题是什么吗?
我期望(尝试做的)是在我的屏幕上收到一个警告,字符串为:
Success from server
在服务器上的 C# class 中看到。
更改您的 C# 代码以发布您的消息
public string Test() {
//Clients.Client("ToClientId").TestMessages("Message");//send messages to specific user
Clients.All.TestMessages("Message"); //send messages to all user
}
发送方式Javascript
signalRhub.server.test();//Note you didn't have created parameter, but you can create them
Javascript这样的方法
signalRhub.client.TestMessages = function (response) {
alert("Response from server: " + response);
};
我是第一次尝试使用 SignalR,想将它添加到我的项目中。
我现在的问题是无法从服务器获取消息。我收到此错误:
TypeError: signalRhub.Test is not a function
我对脚本的引用是这样的(这似乎有效):
<script src="~/Scripts/jquery.signalR-2.3.0.js"></script>
<script src="~/Scripts/jquery.signalR-2.3.0.min.js"></script>
<script src='~/signalr/js'></script>
这是我的客户端代码:
<script>
$(function () {
var signalRhub = $.connection.hubSignalR;
console.log(signalRhub);
//Start connection
$.connection.hub.start(function () {
signalRhub.Test(function (response) {
alert("Response from server: " + response);
//$("#testDiv").html(response);
});
});
});
</script>
这是我的服务器 class 定义,以及我试图调用的方法(无法找到):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Microsoft.AspNet.SignalR.Hubs;
namespace AuthSys.SignalRhub
{
public class HubSignalR : Hub
{
public string Test()
{
return "Success from server";
}
}
}
-------------------- 附加信息----------------
我附上了我的 Firefox 控制台的屏幕截图。在我的客户端代码中,您会注意到这段代码:
console.log(signalRhub);
这就是您在 Firefox 控制台中看到的内容。查看名为connection
的子项,似乎已建立连接。在这里,您可以看到它生成的 URL 等。查看 server
child(扩展了 2 个级别),它似乎找到了服务器上的 Test()
方法。
我的 Startup.cs 看起来像这样(如果重要的话):
using Microsoft.Owin;
using Owin;
[assembly: OwinStartupAttribute(typeof(AuthSys.Startup))]
namespace AuthSys
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
ConfigureAuth(app);
app.MapSignalR();
}
}
}
有人知道我的问题是什么吗?
我期望(尝试做的)是在我的屏幕上收到一个警告,字符串为:
Success from server
在服务器上的 C# class 中看到。
更改您的 C# 代码以发布您的消息
public string Test() {
//Clients.Client("ToClientId").TestMessages("Message");//send messages to specific user
Clients.All.TestMessages("Message"); //send messages to all user
}
发送方式Javascript
signalRhub.server.test();//Note you didn't have created parameter, but you can create them
Javascript这样的方法
signalRhub.client.TestMessages = function (response) {
alert("Response from server: " + response);
};