2016-03-04 47 views
1

我們使用Redis的Redis的和Siglnar偶爾掛起SocketFailure:2400年2月8日和SignalR 2.2.0上EVAL

我們可以在日誌中,我們偶爾也會掛起看到。

StackExchange.Redis.RedisConnectionException: SocketFailure on EVAL 
at Microsoft.AspNet.SignalR.Messaging.ScaleoutStream.Send(Func`2 send, Object state) 
at Microsoft.AspNet.SignalR.Infrastructure.Connection.Send(ConnectionMessage message) 
at Microsoft.AspNet.SignalR.Hubs.HubDispatcher.Outgoing(IHubOutgoingInvokerContext context) 
at Microsoft.AspNet.SignalR.Hubs.HubPipelineModule.<>c__DisplayClass1b.<BuildOutgoing>b__19(IHubOutgoingInvokerContext context) 
at Microsoft.AspNet.SignalR.Hubs.SignalProxy.TryInvokeMember(InvokeMemberBinder binder, Object[] args, Object& result) 
at CallSite.Target(Closure , CallSite , Object , List`1) 
at SR.BusPortal.WebApi.Hubs.SearchHub.<>c__DisplayClass8_0.<SearchInternal>b__0(List`1 x) in D:\Continua\Agent\Ws\37347\Source\WEB\src\SR.BusPortal.WebApi\SR.BusPortal.WebApi\Hubs\SearchHub.cs:line 141 
at SR.BusPortal.Providers.Faciliators.SearchExecutioner.PrepareResultsAsync(IEnumerable`1 connections, Boolean deliverVerifications, Func`2 callback) in D:\Continua\Agent\Ws\37347\Source\WEB\src\SR.BusPortal.WebApi\SR.BusPortal.Providers\Faciliators\SearchExecutioner.cs:line 120 
at SR.BusPortal.Providers.Faciliators.SearchExecutioner.<>c__DisplayClass32_0.<SearchAsync>b__0(List`1 x) in D:\Continua\Agent\Ws\37347\Source\WEB\src\SR.BusPortal.WebApi\SR.BusPortal.Providers\Faciliators\SearchExecutioner.cs:line 216 

StackExchange.Redis.RedisConnectionException: SocketFailure on EVAL 
    at Microsoft.AspNet.SignalR.Messaging.ScaleoutStream.Send(Func`2 send, Object state) 
    at Microsoft.AspNet.SignalR.Infrastructure.Connection.Send(ConnectionMessage message) 

我可以減少它主要是在這個代碼特定行失敗:

Clients.Caller.SearchResults(connectionModels); 

這是primarly的數據返回給客戶端。

現在我正在考慮如果在這種情況下捕捉到特定的異常並再試一次,這將是一個可能的想法。但我不確定這可能會導致客戶端的結果重複嗎?

對錯誤本身或關於重試想法的任何建議?

回答

2

原因不是Redis的服務器。我們使用Microsoft.AspNet.SignalR.Redis,它使用內部1.0.316 StackExchange.Redis,但當前版本是1.0.488。

問題只發生在這個StackExchange.Redis版本中,並且作爲Redis的支持對於Windows告訴我他們已經遇到過類似的問題,因爲客戶端連接werent總是被釋放。

對於我們的緩存,我們使用了ServiceSTack.Redis,即使signalR創建了錯誤,他們也可以讀寫redis。

在我們的案例中,我們只是使用粘性會話,以便我們可以刪除signalR的背板。

另一種方法是使用另一個背板或等待信號R更新StackExchange.Redis版本

2

我有同樣的問題,Redis的2400年2月8日,你可以嘗試將服務器升級到3.0.501

+0

更新解決了它嗎?你使用任何羣集/定位功能? –

+0

我們也在考慮這個問題,但是第一個版本中我們遇到了一個非常糟糕的問題,那就是爲什麼我害怕它; ) –

+0

是的,它解決了這個問題,我們使用redis集羣功能 –