2013-07-30 27 views
5

Tôi có ứng dụng SignalR với ứng dụng .NET. Khi một lỗi xảy ra tại máy chủ tôi cần để có thể xử lý này ở phía khách hàng. Tuy nhiên, đây là một chút khó khăn như Signalr luôn luôn kết thúc tốt đẹp tất cả các ngoại lệ vào một "InvalidOperationException" với một thông điệp như "UnknownUserException đã được ném ...", thay vì thực sự cho tôi UnknownUserException.SignalR - Tuyên bố ngoại lệ cho khách hàng

Tôi không chắc chắn cách thực hiện việc này?

Một ví dụ mà không làm việc ngay bây giờ (kể từ InvalidOperationException được ném thay vì ngoại trừ 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.");  
} 

Trả lời

3

Trên máy chủ của bạn, bạn có thể kích hoạt lỗi chi tiết:

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

Hãy tâm trí, bằng cách thực hiện các lỗi này được ném trên máy chủ sẽ được chuyển cho các máy khách có thể tiết lộ một số lỗ hổng không mong muốn trong việc triển khai phía máy chủ của bạn (chỉ là một FYI).

+0

Có cách nào tôi có thể móc vào việc xử lý ngoại lệ và chỉ truyền bá ngoại lệ mà tôi biết một cách an toàn và bao bọc tất cả các trường hợp khác? – ronag

+0

Loại, bạn có thể tạo mô-đun kênh trung tâm: http://www.asp.net/signalr/overview/hubs-api/hubs-api-guide-server#hubpipeline và sau đó liên kết với những thứ như BuildIncoming để thực thi các hàm trung tâm và bắt các ngoại lệ được ném ra và quyết định có propogate chúng –

+0

Tôi đã thêm vào, 'RouteTable.Routes.MapHubs (new HubConfiguration {EnableDetailedErrors = true, EnableCrossDomain = true});' trong 'Application_Start' và tái chế nhóm ứng dụng của tôi. Vẫn nhận được 'InvalidOperationException' thay vì ngoại lệ thực tế. Bất cứ điều gì tôi có thể đã bỏ lỡ để làm gì? – ronag

Các vấn đề liên quan