Finding out the Thread which is actually handling the WCF request for the HttpContext
In the recent past, the PSSCOR2 debugger extension was made public. This debugger extension contains a very useful command called !aspxpages which shows you information about various asp.net requests running in the dump, the time they have been executing and the thread associated with the System.Web.HttpContext. Here is an example of what this command shows you
0:000> !aspxpages
Going to dump the HttpContexts found in the heap.
Loading the heap objects into our cache.
HttpContext Timeout Completed Running ThreadId ReturnCode Verb RequestPath+QueryString
0x01bbf914 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc0ba4 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc17c4 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc4660 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc56a4 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc6660 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc76a4 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc8660 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bc96a4 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bca6fc 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bcb740 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bcc6fc 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bcd740 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bce6fc 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bcf740 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bd0784 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bd17c8 11647 Sec no 29 Sec 27 200 POST /MySleepingWcfService/Service.svc
0x01bd2814 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bd3858 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01bd4814 11647 Sec no 29 Sec 29 200 POST /MySleepingWcfService/Service.svc
0x01bd68dc 11647 Sec no 29 Sec 24 200 POST /MySleepingWcfService/Service.svc
0x01bdb404 11647 Sec no 29 Sec 31 200 POST /MySleepingWcfService/Service.svc
0x01be3404 11647 Sec no 28 Sec 33 200 POST /MySleepingWcfService/Service.svc
0x01bfd404 11647 Sec no 28 Sec 35 200 POST /MySleepingWcfService/Service.svc
0x01c0f41c 11647 Sec no 27 Sec 37 200 POST /MySleepingWcfService/Service.svc
0x01c1541c 11647 Sec no 27 Sec 39 200 POST /MySleepingWcfService/Service.svc
0x01c3c634 11647 Sec yes XXX 200 POST /MySleepingWcfService/Service.svc
0x01c404c8 11647 Sec no 25 Sec 41 200 POST /MySleepingWcfService/Service.svc
0x01c6264c 11647 Sec no 25 Sec 44 200 POST /MySleepingWcfService/Service.svc
Total 29 HttpContext objects
Using this information you can find out the thread which is handling your request and if the request is taking a longer time to execute, you can check the callstack of the thread to see what it is doing and why it is taking a longer time to execute and this is pretty helpful. If you are hosting WCF services inside IIS, the same command will show you the information about the HttpContexts associated with the WCF requests and the thread handing the request but because of the way the WCF requests work inside IIS, the thread reported by the !aspxpages command will always show you the call-stack like below.
0:027> !clrstack
OS Thread Id: 0x2740 (27)
ESP EIP
0f4af060 775564f4 [HelperMethodFrame_1OBJ: 0f4af060] System.Threading.WaitHandle.WaitOneNative(Microsoft.Win32.SafeHandles.SafeWaitHandle, UInt32, Boolean, Boolean)
0f4af10c 6f6e685f System.Threading.WaitHandle.WaitOne(Int64, Boolean)
0f4af128 6f6e6815 System.Threading.WaitHandle.WaitOne(Int32, Boolean)
0f4af13c 6f6e67dd System.Threading.WaitHandle.WaitOne()
0f4af144 79962000 System.ServiceModel.Activation.HostedHttpRequestAsyncResult.ExecuteSynchronous(System.Web.HttpApplication, Boolean)
0f4af174 799618f4 System.ServiceModel.Activation.HttpModule.ProcessRequest(System.Object, System.EventArgs)
0f4af19c 6574ec35 System.Web.HttpApplication+SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
0f4af1b4 65742a5c System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)
0f4af1f4 6574e1f3 System.Web.HttpApplication+ApplicationStepManager.ResumeSteps(System.Exception)
0f4af244 65741fdc System.Web.HttpApplication.System.Web.IHttpAsyncHandler.BeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)
0f4af260 6574554c System.Web.HttpRuntime.ProcessRequestInternal(System.Web.HttpWorkerRequest)
0f4af294 657451f3 System.Web.HttpRuntime.ProcessRequestNoDemand(System.Web.HttpWorkerRequest)
0f4af2a4 6574438c System.Web.Hosting.ISAPIRuntime.ProcessRequest(IntPtr, Int32)
0f4af4b8 70290256 [ContextTransitionFrame: 0f4af4b8]
0f4af4ec 70290256 [GCFrame: 0f4af4ec]
0f4af648 70290256 [ComMethodFrame: 0f4af648]
The reason for this is the way WCF runtime handles the request. You will always see two threads to process the WCF request. One thread is the CLR ThreadPool thread (which will look something like the above thread) which is the worker thread that comes from ASP.NET and the other thread is an I/O thread that is managed by the WCF IOThreadScheduler (actually created by ThreadPool.UnsafeQueueNativeOverlapped). More details on this behavior are mentioned in this blog.
Most of the times you are interested in finding out the actual WCF thread which is servicing this request because that would be the thread which is actually executing the method code inside your WCF service and if your service it service method is taking a long time to execute, that would be thread that would be the thread that requires attention. At this point, there is no direct command to show you the WCF I/O thread. To find that out, you have to look at the managed call-stack of all the threads in a dump file and find out the threads which have a call to System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke function and track that back to the ASP.NET Worker thread to assosiate it with the actual ASP.NET worker thread shown in !aspxpages output.
So from this dump file, I just picked one such thread which had a call to System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke function (Thread 45).
OS Thread Id: 0x23b4 (45)
ESP EIP
0fc8e428 775564f4 [HelperMethodFrame: 0fc8e428] System.Threading.Thread.SleepInternal(Int32)
0fc8e47c 0f3c00a2 Service.SleepyMethod(Int32)
0fc8e48c 0e6301cd DynamicClass.SyncInvokeSleepyMethod(System.Object, System.Object[], System.Object[])
0fc8e4a0 79957338 System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(System.Object, System.Object[], System.Object[] ByRef)
0fc8e558 79955572 System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(System.ServiceModel.Dispatcher.MessageRpc ByRef)
0fc8e5ac 799550e3 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(System.ServiceModel.Dispatcher.MessageRpc ByRef)
0fc8e5e4 79955000 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage4(System.ServiceModel.Dispatcher.MessageRpc ByRef)
0fc8e610 79954f66 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage3(System.ServiceModel.Dispatcher.MessageRpc ByRef)
0fc8e624 79954d43 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage2(System.ServiceModel.Dispatcher.MessageRpc ByRef)
0fc8e638 799544c7 System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage1(System.ServiceModel.Dispatcher.MessageRpc ByRef)
0fc8e658 7995420b System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean)
0fc8e69c 7995415d System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.Dispatch(System.ServiceModel.Dispatcher.MessageRpc ByRef, Boolean)
0fc8e6ac 79953b3e System.ServiceModel.Dispatcher.ChannelHandler.DispatchAndReleasePump(System.ServiceModel.Channels.RequestContext, Boolean, System.ServiceModel.OperationContext)
0fc8e854 79952b4f System.ServiceModel.Dispatcher.ChannelHandler.HandleRequest(System.ServiceModel.Channels.RequestContext, System.ServiceModel.OperationContext)
0fc8e888 79952893 System.ServiceModel.Dispatcher.ChannelHandler.AsyncMessagePump(System.IAsyncResult)
0fc8e8a0 7991cf05 System.ServiceModel.Dispatcher.ChannelHandler.OnContinueAsyncReceive(System.Object)
0fc8e8b0 79959f86 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem.Invoke2()
0fc8e8f0 79959f28 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem.OnSecurityContextCallback(System.Object)
0fc8e8f8 6f6bfe35 System.Security.SecurityContext.Run(System.Security.SecurityContext, System.Threading.ContextCallback, System.Object)
0fc8e910 79959eed System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem.Invoke()
0fc8e924 79959e70 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper.ProcessCallbacks()
0fc8e958 79959cca System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper.CompletionCallback(System.Object)
0fc8e984 79959c3f System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+ScheduledOverlapped.IOCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
0fc8e990 6193e6dd System.ServiceModel.Diagnostics.Utility+IOCompletionThunk.UnhandledExceptionFrame(UInt32, UInt32, System.Threading.NativeOverlapped*)
0fc8e9c4 6f6bcda4 System.Threading._IOCompletionCallback.PerformIOCompletionCallback(UInt32, UInt32, System.Threading.NativeOverlapped*)
0fc8eb64 70171b6c [GCFrame: 0fc8eb64]
0fc8ecb8 70171b6c [ContextTransitionFrame: 0fc8ecb8]
The rest of the post will walk you through the steps on finding out the HttpContext associated with the above thread. We start by running the command !dso (!dumpstackobjects) on this thread and picking up the object of type System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem.
0:045> !dso
OS Thread Id: 0x23b4 (45)
ESP/REG Object Name
0fc8e480 05f24538 Service
0fc8e48c 05ae2eb8 System.ServiceModel.Dispatcher.SyncMethodInvoker
<stripping for clarity>
0fc8e8f0 05f241d8 System.Security.SecurityContext
0fc8e8fc 05f241c4 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem
0fc8e900 05f241d8 System.Security.SecurityContext
0fc8e90c 05f241c4 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem
0fc8e924 01b3a5fc System.Object
0fc8e928 05f241c4 System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem
0fc8e958 01b3a5fc System.Object
0fc8e974 01b3a728 System.ServiceModel.Diagnostics.Utility+IOCompletionThunk
0fc8e990 01b3a728 System.ServiceModel.Diagnostics.Utility+IOCompletionThunk
0fc8e9ac 01b3a688 System.Threading.Overlapped
0fc8eb98 01c1ab84 System.Threading.OverlappedData
Once you find this object, you can dump this out using !do
0:045> !do 05f241c4
Name: System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem
MethodTable: 79a781a8
EEClass: 796d6aa8
Size: 20(0x14) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6f73ef38 40019b2 4 ...ding.WaitCallback 0 instance 05af63f0 callback
6f7584dc 40019b3 8 System.Object 0 instance 05f15538 state
6f735cf8 40019b4 c ...y.SecurityContext 0 instance 05f241d8 context
6f735204 40019b1 374 ...g.ContextCallback 0 shared static securityContextCallback
>> Domain:Value 01235fc0:NotInit 01292638:05aa2278 <<
From here onwards you have a do a series of !do commands till you reach the HttpContext object. This is how the object hierarchy looks like
System.ServiceModel.Channels.IOThreadScheduler+CriticalHelper+WorkItem (state) -> SecuritySessionServerSettings+ServerSecuritySessionChannel+ReceiveRequestAsyncResult (innerRequestContext)-> System.ServiceModel.Activation.HostedHttpContext(result) -> System.ServiceModel.Activation.HostedHttpRequestAsyncResult (context) -> System.Web.HttpApplication (_context) -> System.Web.HttpContext
So picking up the state field from IOThreadScheduler+CriticalHelper+WorkItem we get SecuritySessionServerSettings+ServerSecuritySessionChannel+ReceiveRequestAsyncResult
0:045> !do 05f15538
Name: System.ServiceModel.Security.SecuritySessionServerSettings+ServerSecuritySessionChannel+ReceiveRequestAsyncResult
MethodTable: 79a2c2d0
EEClass: 7973d4d8
Size: 72(0x48) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6f73fd5c 40009ae 4 System.AsyncCallback 0 instance 05af63d0 callback
6f7584dc 40009af 8 System.Object 0 instance 05f15428 state
6f75eadc 40009b0 1c System.Boolean 1 instance 1 completedSynchronously
6f75eadc 40009b1 1d System.Boolean 1 instance 1 endCalled
6f758a54 40009b2 c System.Exception 0 instance 00000000 exception
6f75eadc 40009b3 1e System.Boolean 1 instance 1 isCompleted
6f7424a4 40009b4 10 ....ManualResetEvent 0 instance 00000000 manualResetEvent
6f7584dc 40009b5 14 System.Object 0 instance 05f15580 thisLock
79a77030 40009b6 18 ...viceModelActivity 0 instance 00000000 callbackActivity
79a43d6c 4002dd7 20 ...itySessionChannel 0 instance 05f0e620 channel
79a04894 4002dd8 24 ...ls.RequestContext 0 instance 05f08504 innerRequestContext
79a7b610 4002dd9 28 ....Channels.Message 0 instance 05f15868 requestMessage
79a3c6b0 4002dda 2c ...lCorrelationState 0 instance 05f241b0 correlationState
6f75eadc 4002ddb 1f System.Boolean 1 instance 0 expired
79a7bbcc 4002ddc 30 ...del.TimeoutHelper 1 instance 05f15568 timeoutHelper
6f73ef38 4002dd5 780 ...ding.WaitCallback 0 shared static onWait
>> Domain:Value 01235fc0:NotInit 01292638:05e3066c <<
6f73fd5c 4002dd6 784 System.AsyncCallback 0 shared static onReceive
>> Domain:Value 01235fc0:NotInit 01292638:05e306bc <<
0:045> !do 05f08504
Name: System.ServiceModel.Activation.HostedHttpContext
MethodTable: 79a09b98
EEClass: 79696fcc
Size: 68(0x44) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6f739e70 4000ab9 18 System.TimeSpan 1 instance 05f0851c defaultSendTimeout
6f739e70 4000aba 20 System.TimeSpan 1 instance 05f08524 defaultCloseTimeout
79a432d4 4000abb 10 System.Int32 1 instance 2 state
79a7b610 4000abc 4 ....Channels.Message 0 instance 05f0bbbc requestMessage
6f758a54 4000abd 8 System.Exception 0 instance 00000000 requestMessageException
6f75eadc 4000abe 14 System.Boolean 1 instance 0 replySent
6f75eadc 4000abf 15 System.Boolean 1 instance 0 replyInitiated
6f75eadc 4000ac0 16 System.Boolean 1 instance 0 aborted
6f7584dc 4000ac1 c System.Object 0 instance 05f08548 thisLock
79a02b04 4000e15 28 ...annels.HttpOutput 0 instance 00000000 httpOutput
79a029ac 4000e16 2c ...hannels.HttpInput 0 instance 05f08554 httpInput
79a03eb0 4000e17 30 ...tpChannelListener 0 instance 05adeaf4 listener
79a8a134 4000e18 34 ...tyMessageProperty 0 instance 00000000 securityProperty
79a09d4c 4000e3a 38 ...dRequestContainer 0 instance 05f0d630 requestContainer
79a095b0 4000e3b 3c ...equestAsyncResult 0 instance 01c40c5c result
0:045> !do 01c40c5c
Name: System.ServiceModel.Activation.HostedHttpRequestAsyncResult
MethodTable: 79a095b0
EEClass: 79696ae8
Size: 60(0x3c) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_MSIL\System.ServiceModel\3.0.0.0__b77a5c561934e089\System.ServiceModel.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6f73fd5c 40009ae 4 System.AsyncCallback 0 instance 01b3a534 callback
6f7584dc 40009af 8 System.Object 0 instance 01c3fba4 state
6f75eadc 40009b0 1c System.Boolean 1 instance 0 completedSynchronously
6f75eadc 40009b1 1d System.Boolean 1 instance 0 endCalled
6f758a54 40009b2 c System.Exception 0 instance 00000000 exception
6f75eadc 40009b3 1e System.Boolean 1 instance 0 isCompleted
6f7424a4 40009b4 10 ....ManualResetEvent 0 instance 00000000 manualResetEvent
6f7584dc 40009b5 14 System.Object 0 instance 01c40c98 thisLock
79a77030 40009b6 18 ...viceModelActivity 0 instance 00000000 callbackActivity
79a096b0 4000e49 20 ...ersonationContext 0 instance 01c40ca4 impersonationContext
79a300b4 4000e4a 24 ....HostedThreadData 0 instance 00000000 hostedThreadData
6580e674 4000e4b 28 ...b.HttpApplication 0 instance 01c3d1f4 context
6ee9fb70 4000e4c 2c System.Uri 0 instance 05f08034 originalRequestUri
6ee9fb70 4000e4d 30 System.Uri 0 instance 05f081f0 requestUri
6f75ab0c 4000e4e 34 System.Int32 1 instance 0 state
6f75eadc 4000e4f 1f System.Boolean 1 instance 0 flowContext
6f765e44 4000e43 178 ...l.WindowsIdentity 0 shared static anonymousIdentity
>> Domain:Value 01235fc0:NotInit 01292638:NotInit <<
6f73ef38 4000e44 17c ...ding.WaitCallback 0 shared static waitOnBeginRequest
>> Domain:Value 01235fc0:NotInit 01292638:NotInit <<
6f73ef38 4000e45 180 ...ding.WaitCallback 0 shared static waitOnBeginRequestWithFlow
>> Domain:Value 01235fc0:NotInit 01292638:NotInit <<
6f735204 4000e46 184 ...g.ContextCallback 0 shared static contextOnBeginRequest
>> Domain:Value 01235fc0:NotInit 01292638:NotInit <<
6f73fd5c 4000e47 188 System.AsyncCallback 0 shared static processRequestCompleteCallback
>> Domain:Value 01235fc0:NotInit 01292638:NotInit <<
6f73c368 4000e48 0 ...ng.AutoResetEvent 0 shared TLstatic waitObject
>> Thread:Value 26b8:01b3a4b8 2740:01b5e4fc 1e10:01b6dca4 6c8:01bdffe0 724:01be7948 188c:01c00938 240c:01c1298c 13d0:01c18964 2260:01c3fba4 20fc:01c65bd0 <<
0:045> !do 01c3d1f4
Name: System.Web.HttpApplication
MethodTable: 6580e674
EEClass: 65610c98
Size: 116(0x74) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6580e85c 4000dde 4 ...pApplicationState 0 instance 01afaac4 _state
6580cf64 4000ddf 8 ...m.Web.HttpContext 0 instance 00000000 _initContext
6580eba0 4000de0 c ...b.HttpAsyncResult 0 instance 01c407d0 _ar
6580eb14 4000de1 10 ...pModuleCollection 0 instance 01c3d494 _moduleCollection
6eea00a0 4000dfc 14 ....EventHandlerList 0 instance 01c3e300 _events
658142c4 4000dfd 18 ...ventHandlersTable 0 instance 01c3e40c _asyncEvents
65815b14 4000dfe 1c ...ation+StepManager 0 instance 01c3f1e4 _stepManager
6f73ef38 4000dff 20 ...ding.WaitCallback 0 instance 01c3f1c4 _resumeStepsWaitCallback
6f735504 4000e00 24 System.EventArgs 0 instance 01b34924 _appEvent
6f75af14 4000e01 28 ...ections.Hashtable 0 instance 01c3d268 _handlerFactories
6f75a8f0 4000e02 2c ...ections.ArrayList 0 instance 00000000 _handlerRecycleList
6f75eadc 4000e03 68 System.Boolean 1 instance 0 _hideRequestResponse
6580cf64 4000e04 30 ...m.Web.HttpContext 0 instance 01c404c8 _context
6f758a54 4000e05 34 System.Exception 0 instance 00000000 _lastError
6f75eadc 4000e06 69 System.Boolean 1 instance 1 _timeoutManagerInitialized
0:045> !do 01c404c8
Name: System.Web.HttpContext
MethodTable: 6580cf64
EEClass: 6560fff8
Size: 192(0xc0) bytes
GC Generation: 0
(C:\Windows\assembly\GAC_32\System.Web\2.0.0.0__b03f5f7f11d50a3a\System.Web.dll)
Fields:
MT Field Offset Type VT Attr Value Name
6580e714 4000fe6 4 ...IHttpAsyncHandler 0 instance 01c3d1f4 _asyncAppHandler
6580e674 4000fe7 8 ...b.HttpApplication 0 instance 01c3d1f4 _appInstance
6580e754 4000fe8 c ....Web.IHttpHandler 0 instance 00000000 _handler
6580e9a4 4000fe9 10 ...m.Web.HttpRequest 0 instance 01c40588 _request
6580ea04 4000fea 14 ....Web.HttpResponse 0 instance 01c40634 _response
6580eac4 4000feb 18 ...HttpServerUtility 0 instance 01c40cb8 _server
6f737c24 4000fec 1c ...Collections.Stack 0 instance 00000000 _traceContextStack
658115e0 4000fed 20 ....Web.TraceContext 0 instance 00000000 _topTraceContext
6f75af14 4000fee 24 ...ections.Hashtable 0 instance 00000000 _items
6f75a8f0 4000fef 28 ...ections.ArrayList 0 instance 00000000 _errors
6f758a54 4000ff0 2c System.Exception 0 instance 00000000 _tempError
6f75eadc 4000ff1 90 System.Boolean 1 instance 0 _errorCleared
6f740378 4000ff2 30 ...ncipal.IPrincipal 0 instance 01b34984 _user
6f75b188 4000ff3 80 System.IntPtr 1 instance 0 _pManagedPrincipal
6580e3dc 4000ff4 34 ...ofile.ProfileBase 0 instance 00000000 _Profile
6f739f0c 4000ff5 a0 System.DateTime 1 instance 01c40568 _utcTimestamp
65810df4 4000ff6 38 ...HttpWorkerRequest 0 instance 01c3fea0 _wr
6f75bd2c 4000ff7 a8 ...Services.GCHandle 1 instance 01c40570 _root
6f75b188 4000ff8 84 System.IntPtr 1 instance 10490900 _ctxPtr
65809b78 4000ff9 3c ...m.Web.VirtualPath 0 instance 00000000 _configurationPath
6f75eadc 4000ffa 91 System.Boolean 1 instance 0 _skipAuthorization
6f75b4bc 4000ffb 40 ...ation.CultureInfo 0 instance 00000000 _dynamicCulture
6f75b4bc 4000ffc 44 ...ation.CultureInfo 0 instance 00000000 _dynamicUICulture
6f75ab0c 4000ffd 88 System.Int32 1 instance 0 _serverExecuteDepth
6f737c24 4000ffe 48 ...Collections.Stack 0 instance 00000000 _handlerStack
<striping the rest of the output>
This context is the actual HttpContext reported inside the !aspxpages pages and using this technique you can associate the WCF request processing threads with the ASP.NET worker thread that handled the request in the first place, so going back to the output given by !aspxpages pages, we can see that the HttpContext (01c404c) to the below entry
0x01c404c8 11647 Sec no 25 Sec 41 200 POST /MySleepingWcfService/Service.svc
So this concludes that the HttpContext 01c404c8 for which the ASP.NET worker thread is 41 is actually getting processed on thread 45.
The steps are a little lengthy but at times you really need to find this information. You can even write a debugger script to automate this whole process.
HAPPY DEBUGGING !!!