Windows 7,SignalR2。調試SignalR hang
我有一些HelloWorld SignalR代碼在一個VS2013項目中工作(即,我的SignalR hello world playground)。
當我將相同的代碼添加到現有應用程序時,SignalR線程在IIS中「掛起」「永遠」。每一次都會發生這種情況。
我SignalR控制檯看起來像:
我的性能計數器是這樣的:
我的工作進程表的樣子:
我想了解從何處開始調試的一些提示。在Java中,我會採用線程轉儲,並且可以很容易地看到發生了什麼。
作爲調試器連接時,這些線程在VS2013中不可見。
在IIS/DotNet中似乎沒有等價物?
這裏是我的樞紐:
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;
}
}
這裏是我的客戶,截斷成最簡單的懸掛方案。
$(function() {
// Initialize the connection to the server
var realtimeNotifier = $.connection.ep1DataImportHub;
$.connection.hub.logging = true;
$.connection.hub.start();
})
有許多有關SignalR在IIS掛着SignalR 1,但我使用SignalR 2.
有人可以告訴我如何開始調試是怎麼回事。這個工具看起來很有趣,但我不知道它是什麼https://github.com/SignalR/SignalR/issues/1335(https://github.com/SignalR/SignalR/issues/1335)
這裏是阻塞線程
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]]
我們沒有直接使用「Application.PreSendRequestHeaders」我們使用的一些插件,如一瞥,RoutedebugHandler,沒戲,等我會試着得到一個簡單的回購程序今天在一起,並得到它。 – Dave
在SignalR 2.2.0/signalr/start上隨機掛起。我不知道如何調試。 –