2013-07-30 82 views
5

我有一個.NET客戶端的SignalR應用程序。當服務器發生錯誤時,我需要能夠在客戶端處理此問題。然而,這是有點困難,因爲Signalr總是將所有異常包裝成「InvalidOperationException」,並帶有「UnknownUserException was thrown ...」之類的消息,而不是實際給我UnknownUserExceptionSignalR - 異常傳播給客戶端

我不知道該怎麼辦?

不正確的現在的工作(因爲InvalidOperationException被拋出而不是actualy除外)的一個例子:

try 
{ 
    await this.hubProxy.Invoke<Guid>("Authenticate", nww object[] { userName, languageCode, credentials }); 
} 
catch(UnknownUserException ex) 
{ 
    Toast.Dislay("Invalid UserName."); 
} 
catch(ConnectionError ex) 
{ 
    Toast.Dislay("Connection Error.");  
} 

回答

3

在您的服務器,您可以啓用詳細的錯誤信息:

Routes.RouteTable.MapHubs(new HubConfiguration 
{ 
    EnableDetailedErrors = true 
}); 

請通過這樣做,服務器上拋出的這些錯誤將傳遞給客戶端,這可能會泄露服務器端實現中的一些意外漏洞(僅供參考)。

+0

是否有某種方式可以掛鉤到異常處理中,並且只傳播我以安全方式知道的異常,幷包裝所有其他方法? – ronag

+0

類型,你可以創建一個集線器管道模塊:http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server#hubpipeline然後綁定到像BuildIncoming這樣的東西來執行集線器功能並捕獲拋出的異常並決定是否傳播它們 –

+0

我添加了'RouteTable.Routes.MapHubs(新的HubConfiguration {EnableDetailedErrors = true,EnableCrossDomain = true});'在'Application_Start'中並回收了我的應用程序池。仍然得到'InvalidOperationException'而不是實際的例外。我可能錯過了什麼? – ronag