【问题标题】:Call SignalR hub from controller action mvc [duplicate]从控制器操作 mvc 调用 SignalR 集线器 [重复]
【发布时间】:2018-10-27 14:54:52
【问题描述】:

在我的项目中,如果收到新数据,我想更新我的数据表。我的项目包含一个 MVC .Net 项目、一个 Web 服务和一个 Windows 窗体应用程序。

当新的数据信息输入 winfom 应用程序时,数据发送到服务和服务更新数据库,然后调用 Web 应用程序 (mvc) 中的 SignalR hub。

在我的网络应用程序中,我可以使用 JavaScript 模型(如微软文档中的聊天客户端)在视图文件(cshtml 文件)中调用 signalR。此方法在网络应用程序中运行良好,但我不能使用从我的网络服务调用它。我还找到了一些使用某些模型的演示(例如使用 signalR 的 2 个控制台应用程序),但我无法在我的解决方案中进行转换。

这是我的中心(dataHub):

public class DataHub : Hub
{

    /// <summary>
    ///     update software/companies live update table. data came from signal action in HomeController.
    /// </summary>
    /// <param name="signalFor"></param>
    /// <param name="id"></param>
    /// <param name="weight"></param>
    /// <param name="name"></param>
    /// <param name="datetime"></param>
    public void UpdateSignal(string signalFor, string id, string weight, string name, string datetime)
    {
        Clients.All.readyforupdate(signalFor, id, weight, name, datetime);
    }
}

我从一个名为 signal 的 actionResult 中调用它。

    /// <summary>
    ///     update signals form other palces.
    /// </summary>
    /// <param name="signalFor">"software", "company"</param>
    /// <param name="id">signal data id</param>
    /// <param name="weight">signal data weight</param>
    /// <param name="name">signal data name</param>
    /// <param name="datetime">signal data datetime</param>
    /// <returns></returns>
    public ActionResult Signal(string signalFor, string gid, string weight, string name, string datetime)
    {

        ViewBag.signalFor = signalFor;
        ViewBag.id = gid;
        ViewBag.weight = weight;
        ViewBag.name = name;
        ViewBag.datetime = datetime;
        return View();
    }

我的问题是:如何在不使用 JavaScript 模型的情况下直接从 Web 服务(使用页面的 url)调用我的 signalR 集线器更新功能。

更新


谢谢。这对我有用:

    public string sender()
    {
        var ran = new Random();
        var x = new LiveUpdate
        {
            Id = Guid.Parse("9FEDD9FB-FE14-4BC2-B0BD-296E71ABAC26"),
            Weight = ran.Next(20000, 35000),
            Name = "companyName",
            Datetime = DateTime.Now
        };

        var hubConnection = new HubConnection("http://localhost:5138/");
        IHubProxy myHub = hubConnection.CreateHubProxy("DataHub");
        hubConnection.Start().Wait();
        myHub.Invoke("UpdateSignal",
            "company",
            x.Id.ToString(),
            x.Weight.ToString(),
            x.Name,
            x.Datetime.ToShortTimeString()
            );
        return "send";
    }

【问题讨论】:

  • 使用 HttpClient 你应该能够向中心方法发布一个帖子

标签: c# asp.net-mvc model-view-controller signalr


【解决方案1】:

您必须调用您的 HUB 并向所有连接的客户端发送事件,请参考此示例:

var dataHub = GlobalHost.ConnectionManager.GetHubContext<DataHub>();
dataHub.Clients.All.UpdateSignal(...);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多