SgnalR.NET服务器正在等待来自客户端的值



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

最新更新