【问题标题】:SgnalR .NET server await value from client [closed]SgnalR .NET 服务器等待来自客户端的值 [关闭]
【发布时间】:2014-09-24 03:04:49
【问题描述】:

我正在制作一个服务器 - 客户端应用程序,以便在实时 SignalR 技术中制作服务器控件。

我应该想从客户端获取对象列表,等待返回值,看例子:

服务器:

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

客户:

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

Like ajax 请求 - 请求 -> 等待返回 - 响应。

我该怎么做?

感谢您的关注! :)

【问题讨论】:

    标签: c# .net signalr async-await


    【解决方案1】:

    客户端的方法应该是这样的:

    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】:

      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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-23
          • 1970-01-01
          • 2014-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-26
          • 1970-01-01
          相关资源
          最近更新 更多