2014-09-23 88 views
-2

即时通讯使服务器 - 客户端应用程序能够实时服务器控制SignalR技术。SgnalR .NET服务器正在等待来自客户端的值

我想从客户端获取对象的名单,等待返回值,看看这个例子:

服务器:

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

客户:

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

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

我该怎么办呢?

感谢您的关注! :)

回答

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>()); 
} 
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方法异步执行,并返回一个任务对象。 如果您未指定await或.Wait(),则在您调用的方法执行完成之前,将执行下一行代码 。

这应该工作:P

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); 
相关问题