2014-09-23 142 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); 
相關問題