在非 MVC 项目中从客户端调用 SignalR 服务器端方法
SignalR Server side method call from Client side in Non MVC project
我熟悉 WebMethods 和 PageMethods,可以在不刷新页面的情况下从客户端调用服务器端方法。
我正在实现调用服务器端方法(存在于 index.aspx.cs 中)。
这是我正在尝试的:
服务器端 创建中心 class:
public class MyHub : Hub
{
public void RefreshData(string imessage)
{
Clients.All.displayData(imessage);
}
}
客户端:
<script>
var isconnected = false;
(function () {
$.connection.myHub.client.displayData = function (thisdata) {
$('ul').append('<li>' + thisdata + '</li>');
};
$("#btnadd").click(function () {
if (isconnected) {
$.connection.myHub.server.refreshData($("#txtval").val());
}
});
$.connection.hub.start()
.done(function () {
isconnected = true;
})
.fail(function () {
isconnected = false;
});
})();
</script>
以上一切正常,客户端正在调用服务器端的 RefreshData 方法,服务器正在将消息传递给客户端的 displayData 方法。
我的问题是:与AJAX WebMethod()一样..是否可以调用index.aspx.cs的任何方法(不在MyHub内部class) ?
如果我谈论从 index.aspx.cs 调用客户端方法,那么我们可以尝试:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.displayData(imessage);
但是如果我搜索来自任何 page.aspx.cs 的监听客户端的方法调用,我什么也得不到..
我希望我已经解释了这个问题,如果没有..请原谅..
不,您不能使用 SignalR 连接调用 aspx.cs 方法(集线器外部)。您需要使用 SignalR 调用 aspx.cs 方法的具体场景是什么?如您所述,使用 ajax 调用 aspx.cs 方法。
事实上,对于上面提到的代码片段,ajax 最适合(不是
信号R)。
SignalR 主要用于客户端和服务器之间需要打开连接的情况(例如使用 websocket,SignalR 支持的传输选项之一)。如果您需要在客户端不请求的情况下将消息从服务器推送到客户端,则更合适。
// Invoke this from server when server want to push some information to client without client requesting this information
$.connection.myHub.client.updateData = function (thisdata) {
$('ul').append('<li>' + thisdata + '</li>');
};
我熟悉 WebMethods 和 PageMethods,可以在不刷新页面的情况下从客户端调用服务器端方法。
我正在实现调用服务器端方法(存在于 index.aspx.cs 中)。
这是我正在尝试的:
服务器端 创建中心 class:
public class MyHub : Hub
{
public void RefreshData(string imessage)
{
Clients.All.displayData(imessage);
}
}
客户端:
<script>
var isconnected = false;
(function () {
$.connection.myHub.client.displayData = function (thisdata) {
$('ul').append('<li>' + thisdata + '</li>');
};
$("#btnadd").click(function () {
if (isconnected) {
$.connection.myHub.server.refreshData($("#txtval").val());
}
});
$.connection.hub.start()
.done(function () {
isconnected = true;
})
.fail(function () {
isconnected = false;
});
})();
</script>
以上一切正常,客户端正在调用服务器端的 RefreshData 方法,服务器正在将消息传递给客户端的 displayData 方法。
我的问题是:与AJAX WebMethod()一样..是否可以调用index.aspx.cs的任何方法(不在MyHub内部class) ?
如果我谈论从 index.aspx.cs 调用客户端方法,那么我们可以尝试:
var context = GlobalHost.ConnectionManager.GetHubContext<MyHub>();
context.Clients.All.displayData(imessage);
但是如果我搜索来自任何 page.aspx.cs 的监听客户端的方法调用,我什么也得不到..
我希望我已经解释了这个问题,如果没有..请原谅..
不,您不能使用 SignalR 连接调用 aspx.cs 方法(集线器外部)。您需要使用 SignalR 调用 aspx.cs 方法的具体场景是什么?如您所述,使用 ajax 调用 aspx.cs 方法。
事实上,对于上面提到的代码片段,ajax 最适合(不是 信号R)。
SignalR 主要用于客户端和服务器之间需要打开连接的情况(例如使用 websocket,SignalR 支持的传输选项之一)。如果您需要在客户端不请求的情况下将消息从服务器推送到客户端,则更合适。
// Invoke this from server when server want to push some information to client without client requesting this information
$.connection.myHub.client.updateData = function (thisdata) {
$('ul').append('<li>' + thisdata + '</li>');
};