【发布时间】:2014-08-02 19:51:06
【问题描述】:
我有一个 Web 应用程序,它的仪表板上的图表很少。图表数据在客户端调用 WCF 服务方法的 document.ready 函数中获取。
我现在想要的是在我的应用程序中使用 SignalR。我对 SignalR 真的很陌生。我如何从 SignalR Hub 调用 WCF 方法,或者您可以说,我希望 WCF 服务每隔一分钟将数据推送到客户端,而不是从服务器中提取数据。
signalR 和 WCF 服务之间有没有一种通信方式。
另一种方法是强制客户端每分钟向 WCF 服务请求数据。
任何帮助将不胜感激。
到目前为止,我已经完成了关注。
我的仪表板页面上的客户端功能
<script src="Scripts/jquery.signalR-2.0.3.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="/signalr/hubs"></script>
<a id="refresh">Refresh</a>
$(function() {
var dashboardHubProxy = $.connection.dashboardHub;
$.connection.hub.start().done(function() {
// dashboardHubProxy.server.refreshClient(parameters);
$("#refresh").click(function() {
dashboardHubProxy.server.refreshClient(parameters);
});
});
dashboardHubProxy.client.refreshChart = function (chartData) {
debugger;
DrawChart(chartData, 'Hourly Call Count For Last ' + Duration + ' Days', '#chartHourly', 'StackedAreaChart');
};
});
而我的 Dashboard Hub 类如下
public class DashboardHub : Hub
{
private readonly ReportService ReportService = new ReportService();
public void RefreshClient(string parameters)
{
var chartData = ReportService.GenerateHourlyCallsTrendGraphicalReport(parameters);
Clients.All.refreshChart(chartData);
}
}
我的 SignalR 启动类如下
[assembly: OwinStartup(typeof(CallsPortalWeb.Startup), "Configuration")]
namespace CallsPortalWeb
{
public static class Startup
{
public static void Configuration(IAppBuilder app)
{
ConfigureSignalR(app);
}
public static void ConfigureSignalR(IAppBuilder app)
{
app.MapSignalR();
}
}
}
当我在集线器上单击刷新按钮和 RefreshClient 方法上的调试器时,调试器无法访问该方法,这意味着我无法调用 SignalR 的服务器端方法。
web.config 中有什么需要做的吗?
【问题讨论】:
-
我唯一真正想要的就是能够让服务器将数据推送到仪表板
-
很遗憾,我们不会为您编写代码,您可以提供代码,我们可以帮助澄清它并磨练您的尝试。我在下面提供的链接将解释 SignalR,它不是神奇地发生的事情,您必须阅读并了解它,我提供了资源来做到这一点。如果您没有提供您尝试过的代码,那么您将无法找到您正在寻找的答案,因为我们没有任何可以指导您的内容。
-
为了进一步详细说明我的评论,您是否知道 SignalR 本身不会保留连接?您打算如何存储谁已连接以及谁属于哪个组以及谁将获得您想要发送到仪表板的这些更新,您是使用静态集合还是持久保存在数据库中,您将使用多台服务器?这个仪表板用户是特定的,还是您将数据发送到全世界? signalR 背后还有更多内容,而不仅仅是发送消息并从服务器更新 ui。
-
@Tony 我将从数据库中获取数据。仪表板是用户特定的。对于登录的人。我正在考虑仅为呼叫者客户端更新仪表板。如果我有一些误解,请详细说明。
-
有人可以解释如何通过 WCF 端点托管 SighalR 集线器吗?