2012-12-29 53 views
0

創建網址我開始的Visual Studio 2012與SignalR工作,到目前爲止,我得到了它的基本竅門,我自己引導通過this例子(你可以在瀏覽網頁的代碼)。我決定爲所述示例添加REST服務,因此我添加了一項基本服務,並且它工作正常。SignalR - 不能爲HubConnection

我希望採取的下一步是在服務和SignalR之間添加一個通信,因此根據示例向我顯示的內容,我只需要通過項目中的url創建HubConnection(在這種情況下,該示例使用url http:localhost:4200)。您可以檢查WorkerRoleHubConfiguration類,它具有下一行的方法:

return RoleEnvironment.GetConfigurationSettingValue("GUI_URL"); 

哪裏GUI_URL是http:本地主機:4200。

在我的服務類,那麼我只是添加了以下的方法:

var url = RoleEnvironment.GetConfigurationSettingValue("http://localhost:4200"); 

try 
{ 
    HubConnection _connection = new HubConnection(url); 
    IHubProxy _hub = _connection.CreateProxy("SiteMonitR"); 
    _hub.Invoke("displayResult"); 
} 
catch (Exception ex) 
{ 
    error = ex.ToString(); 
} 

但是拋出異常,this之一。

我不undertand爲什麼我可以以同樣的方式的例子確實獲得url,因爲它是在服務器類來完成,因爲我做的一切。

我想要達到的目標是,當一個端點accesed並在我的系統有新的變化,SignalR通知給連接它的客戶端。

我希望有人能幫助我理解這有什麼錯我的工作。

編輯

我加入我的ServiceConfiguration.Local.cscfg,我ServiceConfiguration.Cloud.cscfg和ServiceDefinition.csdef中文件作爲參考here,我覺得這個問題應該在那裏,但說實話,我不知道爲什麼這不起作用。

EDIT 2

,我發現了以下情況例外,在這條線var url = RoleEnvironment.GetConfigurationSettingValue("http://localhost:4200");

唯一的例外是:

SEHExcetion occurred. External component has thrown an exception. 

回答

0

的URL是一個GUI - 它必須是一個網絡接口供信號員協商集線器連接。在該示例中,集線器(服務器)將更新發送到來自配置的URL的連接 - 再次是Web界面(html頁面)。

邏輯溝通需要駐留在服務器類,並從輔助角色調用。例如,使得在輔助角色服務的呼叫後,然後調用server.DoSomething(「信息」)調用消息給服務器。該代碼看起來像這樣:

public Class Server 
{ ... 
    public void DoSomething(string message) 
    { 
     _hub.Invoke("doSomething", message); 
    } 
    ... 
} 

然後在服務器。運行()地址:

// whenever a DoSomething is called 
    _hub.On<string>("doSomething", (message) => _hub.Invoke("doSomething", message)); 

而且在SiteMonitRNotificationHub

public class SiteMonitRNotificationHub : Hub 
{ 
    ... 
    public void DoSomething(string address) 
    { 
     Clients.doingSomething(address); 
    } 
    ... 
} 

終於在Web GUI中的控制器腳本:

c.siteMonitorHub 
... 
    .on('doingSomething', function (message) { 
     c.doSomething(message); 
    }) 

和...

this.doSomething= function (message) { 
    // do something in your web page with message 
}; 
+0

所以如果我使用相同的網址,爲什麼它不工作?我必須以不同的方式參考它嗎? –

+0

我改變了我如何得到這樣的網址'var url = RoleEnvironment.GetConfigurationSettingValue(「GUI_URL」);'但是我得到了一個異常'外部組件拋出了一個異常。「我真的失去了爲什麼我不能創建HubConnection對象,還是我誤解了一些東西? –

+0

RoleEnvironment.GetConfigurationSettingValue(「name」)是從Azure設置文件中使用key =「name」獲取值的Azure方法。你有URL,只需使用var url =「http:// localhost:4200」。如果您未在Azure或Azure模擬器中運行網站,則RoleEnvironment.GetConfigurationSettingValue()將始終返回一個異常,同樣,如果該設置不存在,您將收到錯誤。 – viperguynaz

相關問題