Windows 7, SignalR2.Mise au point du signalR hang
J'ai un code HelloWorld SignalR qui fonctionne dans un projet VS2013 (par exemple, mon terrain de jeu SignalR hello world).
Lorsque j'ajoute le même code à une application existante, les threads SignalR "se bloquent" dans IIS "pour toujours". Cela arrive à chaque fois.
Ma console SignalR ressemble:
Mes compteurs perfmon ressembler à ceci:
Ma liste de processus de travail ressemble à:
Je suis après quelques conseils sur où commencer le débogage. En Java, je prenais un vidage de fil et je pouvais voir ce qui se passait assez facilement.
Ces threads ne sont pas visibles dans VS2013 lorsqu'ils sont connectés en tant que débogueur.
Il ne semble pas y avoir d'équivalent dans IIS/DotNet?
Voici mon hub:
public class Ep1DataImportHub : Hub
{
public int recordsToBeProcessed = 100000;
public void DoLongOperation()
{
for (int record = 0; record <= recordsToBeProcessed; record++)
{
if (ShouldNotifyClient(record))
{
Clients.Caller.sendMessage(string.Format
("Processing item {0} of {1}", record, recordsToBeProcessed));
Thread.Sleep(10);
}
}
}
private static bool ShouldNotifyClient(int record)
{
return record % 10 == 0;
}
}
Voici mon client, tronquée au scénario de suspension simple.
$(function() {
// Initialize the connection to the server
var realtimeNotifier = $.connection.ep1DataImportHub;
$.connection.hub.logging = true;
$.connection.hub.start();
})
Il y a beaucoup d'environ SignalR se bloque dans IIS avec SignalR 1, mais je suis en utilisant SignalR 2.
Quelqu'un peut-il s'il vous plaît me dire comment démarrer le débogage ce qui se passe. Cet outil semble intéressant, mais je ne sais pas ce qu'il est https://github.com/SignalR/SignalR/issues/1335 (https://github.com/SignalR/SignalR/issues/1335)
Voici la pile d'appel géré d'un des fils coincés
System_Web_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, Boolean, Boolean ByRef)+8f
[[InlinedCallFrame] (System.Web.Hosting.UnsafeIISMethods.MgdExplicitFlush)] System.Web.Hosting.UnsafeIISMethods.MgdExplicitFlush(IntPtr, Boolean, BooleanByRef)
System_Web_ni!System.Web.Hosting.IIS7WorkerRequest.ExplicitFlush()+20
System_Web_ni!System.Web.HttpResponse.Flush(Boolean, Boolean)+c3
System_Web_ni!System.Web.HttpWriter.WriteFromStream(Byte[], Int32, Int32)+a0
Microsoft.Owin.Host.SystemWeb.CallStreams.DelegatingStream.Write(Byte[], Int32, Int32)+3a
Microsoft.Owin.Host.SystemWeb.CallStreams.OutputStream.Write(Byte[], Int32, Int32)+3b
Microsoft.AspNet.SignalR.Owin.ServerResponse.Write(System.ArraySegment`1)+24
Microsoft.AspNet.SignalR.Hosting.ResponseExtensions.End(Microsoft.AspNet.SignalR.Hosting.IResponse, System.String)+c8
Microsoft.AspNet.SignalR.PersistentConnection+d__f.MoveNext()+180
mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+285
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+9
mscorlib_ni!System.Runtime.CompilerServices.AsyncMethodBuilderCore+MoveNextRunner.Run()+a4
System_Web_ni!System.Web.Util.SynchronizationHelper.SafeWrapCallback(System.Action)+b4
mscorlib_ni!System.Threading.Tasks.Task.Execute()+6e
mscorlib_ni!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+285
mscorlib_ni!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean)+9
mscorlib_ni!System.Threading.Tasks.Task.ExecuteWithThreadLocal(System.Threading.Tasks.Task ByRef)+250
mscorlib_ni!System.Threading.Tasks.Task.ExecuteEntry(Boolean)+85
mscorlib_ni!System.Threading.ThreadPoolWorkQueue.Dispatch()+1ea
[[DebuggerU2MCatchHandlerFrame]]
[[ContextTransitionFrame]]
[[DebuggerU2MCatchHandlerFrame]]
Nous n'utilisons pas directement « Application.PreSendRequestHeaders » Nous n'utilisons certains plugins tels que Glimpse, RoutedebugHandler, Moxi, etc. Je vais essayer d'obtenir une application de prise en pension simple, ensemble aujourd'hui et l'obtenir pour vous. – Dave
Sur SignalR 2.2.0/signalr/start se bloque aléatoirement. Je n'ai aucune idée de comment déboguer cela. –