2016-09-02 553 views
0

我是新來的SignalR,我真的沒有線索。我需要連接到一個流並檢索一些數據。我得到了所有者的一些幫助,但他們不知道如何使用JavaScript創建它。SignalR JavaScript客戶端連接

他們給了我下面的C#代碼:

private static HubConnection _hubConnection; 
private static IHubProxy _hubProxy; 

_hubConnection = new HubConnection("https://sesignalr.esmartapi.com/realtime"); 
_hubProxy = _hubConnection.CreateHubProxy("timeseriesHub"); 
_hubProxy.On<ValueResult>("broadCastValue", RecieveServerStreamMessageObject); 

_hubConnection.Start().Wait(); 

_hubProxy.Invoke("Subscribe", assetId).Wait(); 


private static void RecieveServerStreamMessageObject(ValueResult message) 
{ 
    Console.WriteLine(message.ValueTime.ToShortDateString() + " " + message.ValueTime.ToLongTimeString() + " - Value: " + message.Value + " (id " + message.AssetId + ")"); 
} 

public class ValueResult 
{ 
    public string AssetId { get; set; } 
    public int ValueCategory { get; set; } 
    public DateTime ValueTime { get; set; } 
    public Double Value { get; set; } 
    public int ValueUnit { get; set; } 
} 

所以我用下面的JavaScript代碼試圖連接:

var connection = $.hubConnection('https://sesignalr.esmartapi.com/realtime'); 
var proxy = connection.createHubProxy('timeseriesHub'); 

// receives broadcast messages from a hub function, called "broadcastMessage" 
proxy.on('broadcastMessage', function(message) { 
    console.log(message); 
}); 

// attempt connection, and handle errors 
connection.start({ jsonp: true }) 
.done(function(){ console.log('Now connected, connection ID=' + connection.id); }) 
.fail(function(){ console.log('Could not connect'); }); 

和運行這給了以下錯誤:

403(禁止:JSONP被禁用。)

我想我應該用JavaScript來重新創建上面的C#代碼,但是我的C#知識是有限的,我沒有這方面的經驗。我不知道如何做到這一點,任何幫助表示讚賞。

+0

你從哪裏加載腳本?如果它不是來自您嘗試連接的服務器,則會觸及JavaScript相同的來源策略(https://en.wikipedia.org/wiki/Same-origin_policy),在這種情況下您需要啓用CORS。你可以在這裏找到更多的細節:http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-javascript-client – Pawel

回答

0

我不認爲你真的可以連接到使用JavaScript的流,它更多的通知框架。您需要通知JavaScript客戶端某些內容已更改,並通過進行其他服務器調用或通過您發送的通知中的數據進行更新。

C#代碼是可怕的方式,它試圖創建一個異步通知框架的同步流。 Signalr不會以這種方式工作。 IMO。