SignalR .NET服务器等待来自客户端的值

时间:2014-09-23 13:45:15

标签: c# .net signalr async-await

我正在建立一个服务器 - 客户端应用程序来实时控制服务器信号技术。

我想要从客户端获取对象列表,等待返回值,查看示例:

服务器

List<Site> Sites = (List<Site>)Clients.Caller.GetSiteList();

客户端:

void GetSiteList()
{
      _triggerHubProxy.Invoke<int>("SetSiteList", new List<SIte>);
}

像ajax请求 - 请求 - &gt;等待返回 - 响应。

我怎么做?

感谢您的关注! :)

3 个答案:

答案 0 :(得分:0)

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对象。   如果未指定await或.Wait(),则下一行代码将为   在您调用的方法执行完毕之前执行。

这应该有效:P

答案 1 :(得分:0)

客户端上的方法应如下所示:

async Task GetSiteList()
{
    await _triggerHubProxy.Invoke<int>("SetSiteList", new List<Site>());
}

并且应该通过调用它的方法等待。如果要返回值,则需要将方法更改为以下内容:

async Task<int> GetSiteList()
{
    return await _triggerHubProxy.Invoke<int>("SetSiteList", new List<Site>());
}

答案 2 :(得分:0)

使用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);