在我的项目中,如果收到新数据,我想更新我的数据表。我的项目包含一个MVC .Net项目,一个Web服务和一个Windows窗体应用程序。
当在winfom app中输入新数据信息时,数据发送到服务和服务更新数据库,然后在Web应用程序(mvc)中调用SignalR hub。
在我的网络应用程序中,我可以使用JavaScript模型(如微软文档中的聊天客户端)在视图文件(cshtml文件)中调用signalR。这种方法在Web应用程序中运行良好,但我不能使用从我的Web服务调用它。我也找到一些使用某些模型的演示(比如使用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 hub更新功能。
更新
感谢。这对我有用:
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";
}
答案 0 :(得分:0)
You have to call your HUB and dispatch an event to all connected clients, please refer to this example:
var dataHub = GlobalHost.ConnectionManager.GetHubContext<DataHub>();
dataHub.Clients.All.UpdateSignal(...);