SgnalR.NET服务器正在等待来自客户端的值
本文关键字:客户端 在等待 NET 服务器 SgnalR | 更新日期: 2023-09-27 18:24:00
im正在制作一个服务器-客户端应用程序,以便在实时SignalR技术中进行服务器控制。
我应该想从客户端获得对象列表,并等待返回值,例如:
服务器:
List<Site> Sites = (List<Site>)Clients.Caller.GetSiteList();
客户端:
void GetSiteList()
{
_triggerHubProxy.Invoke<int>("SetSiteList", new List<SIte>);
}
像ajax请求-请求->等待返回-响应。
我该怎么做?
感谢您的关注!:)
客户端上的方法应该如下所示:
async Task GetSiteList()
{
await _triggerHubProxy.Invoke<int>("SetSiteList", new List<Site>());
}
并且应该由调用它的方法等待。如果你想返回值,你需要将方法更改为以下内容:
async Task<int> GetSiteList()
{
return await _triggerHubProxy.Invoke<int>("SetSiteList", new List<Site>());
}
http://www.asp.net/signalr/overview/signalr-20/hubs-api/hubs-api-guide-net-client
var stocks = await stockTickerHub.Invoke<IEnumerable<Stock>>("AddStock", new Stock() { Symbol = "MSFT" });
foreach (Stock stock in stocks)
{
textBox.Text += string.Format("Symbol: {0} price: {1}'n", stock.Symbol, stock.Price);
}
Invoke方法异步执行并返回一个Task对象。如果您没有指定Wait或.Wait(),那么下一行代码将在调用的方法执行完毕之前执行。
这应该有效:p
使用SignalR在服务器上从客户端方法获取返回值是不可能的。相反,您应该将站点列表作为参数从客户端传递到服务器。所以这个:
public void MyServerHubMethod()
{
// The following line will throw an InvalidCastException since
// Client methods cannot return values to the server.
List<Site> sites = (List<Site>)Clients.Caller.GetSiteList();
DoSomethingWithSites(sites);
}
变成这样:
public void MyServerHubMethod(List<Site> sites)
{
DoSomethingWithSites(sites);
}
可以这样称呼:
List<Site> sites = GetSites();
await _triggerHubProxy.Invoke("MyServerHubMethod", sites);