Quantcast
Channel: Share Poignant
Viewing all 36 articles
Browse latest View live

SP2010: 503s, HTTP Throttling, Threads Waiting

$
0
0

 

 

Symptoms

A web application in a SharePoint 2010 farm becomes unresponsive (hangs) to the client's perspective under high, medium, or even low client load at random times. 

Clients of the SharePoint sites see 503 and/or "server too busy" or "The server is busy now.  Try again later," in their browsers. 

Admins may see events in the application event log that center around http throttling.  Examples:

Log Name:      Application
Source:        Microsoft-SharePoint Products-SharePoint Foundation
Date:          [Date and Time]
Event ID:      8062
Task Category: Http Throttling
Level:         Critical
User:          FOO\SP_WebApps
Computer:      WFE002.win.foo.org
Description:
Http throttling on SharePoint - 443 stops because there is no heavy load detected now. 472 requests have been throttled during the throttling period.


Log Name:      Application
Source:        Microsoft-SharePoint Products-SharePoint Foundation
Date:          [Date and Time]
Event ID:      8032
Task Category: Http Throttling
Level:         Critical
User:          FOO\SP_WebApps
Computer:      WFE002.win.foo.org
Description:
Http throttling starts because a heavy load was detected on SharePoint - 443. The excessive performance counters include: WFE002.win.foo.org
\ASP.NET\Requests Current: 634.04

The c:\windows\system32\logfiles\httperr\httperr*.log show shows many "connection_dropped" entries followed by many "connection_abandoned_by_reqQueue" for the appPool corresponding to the unresponsive Web App.   Examples:

 [Date and Time] 172.30.122.196 58092 10.51.2.80 443 HTTP/1.1 GET /dist/5e/src/oruit/Team+Documents/Forms/AllItems.aspx - 1512381070 Connection_Dropped SharePoint+-+443
 [Date and Time] 172.30.122.196 50060 10.51.2.80 443 HTTP/1.1 GET /nit/FOO/security/FSM/Documents/Forms/AllItems.aspx - 1512381070 Connection_Dropped SharePoint+-+443
 [Date and Time] 10.110.77.146 64060 10.51.2.80 443 HTTP/1.1 HEAD /nit/FOO/OneNote/Open+Notebook.onetoc2 - 1512381070 Connection_Abandoned_By_ReqQueue SharePoint+-+443
 [Date and Time]172.30.122.196 59270 10.51.2.80 443 HTTP/1.1 GET /nit/FOO/ins/Lists/MXTraining/overview.aspx - 1512381070 Connection_Abandoned_By_ReqQueue SharePoint+-+443
[Date and Time]172.30.122.196 61391 10.51.2.80 443 HTTP/1.1 HEAD /nit/FOO/Projects/Documents/BluePrint+Draft+2013.docx - 1512381070 Connection_Abandoned_By_ReqQueue SharePoint+-+443
 

A "hang dump" of the w3wp.exe process (made with either taskmanager's "Create user dump" option or with DebugDiag 1.2) shows a very high percentage of worker threads (example: 83.58% of threads blocked [499 threads]) waiting and "calling an ISAPI Extension OWSSVR."   A debugdiag 1.2 crash/hang analysis script of such a hang dump may show, as an example, the following type of call stacks:

 

The following threads in w3wp.exe__Application Pool (6.13.2011 6.01.13 PM)__PID__13912__Date__09_13_2013__Time_05_05_16PM__920__Manual Dump.dmp are calling an ISAPI Extension OWSSVR (C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI\OWSSVR.DLL.)

( 15 16 17 18 19 20 21 22 39 45 47 55 56 57 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 207 208 209 210 212 213 )

77.21% of threads blocked (166 threads)

Entry point     msvcr90!endthreadex+64

Create time     [Date and Time]

Time spent in user mode     0 Days 00:00:06.140

Time spent in kernel mode     0 Days 00:00:01.484

This thread is calling an ISAPI Extension OWSSVR

Full Call Stack

Function

ntdll!ZwDelayExecution+a

KERNELBASE!SleepEx+ab

ONETUTIL!Vistream::error+191

ONETUTIL!VonetLocks::CReaderWriterLock3::_LockSpin+e3

ONETUTIL!CLKRLinearHashTable::_ReadOrWriteLock+55

ONETUTIL!CLKRLinearHashTable::_FindKey+36

ONETUTIL!CLKRHashTable::FindKey+88

STSWEL!VglobalAuditStore::ensureDatabaseQueue+d0

STSWEL!VglobalAuditStore::addAuditEntry+d8

STSWEL!auditSecurityScopeEvent+27d

STSWEL!VdocumentStore::httpGetDocument+36cf

STSWEL!VhttpManager::loadFileCore+7ef

STSWEL!VhttpManager::loadFile+f7

STSWEL!VhttpManager::handleNormalFetch+73f

STSWEL!VhttpManager::handleCommonFetch+37

STSWEL!VhttpManager::handlePOST+18

STSWEL!VhttpManager::dispatchHttpRequest+2d6

OWSSVR!MsoFAssertSzTagProcVar+6bdf1

OWSSVR!MsoFAssertSzTagProcVar+5957f

ONETUTIL!Vframework::doMain+a7

OWSSVR!MsoFAssertSzTagProcVar+856

ONETUTIL!COWSThreadWithHeap::WalkHeap+1dc

ONETUTIL!COWSThreadWithHeap::Uninitialize+66a

msvcr90!endthreadex+47

msvcr90!endthreadex+e8

kernel32!BaseThreadInitThunk+d

ntdll!RtlUserThreadStart+1d

   

All the other waiting ("blocked") threads will look identical to that.  Note especially the ONETUTIL!VonetLocks::CReaderWriterLock3::_LockSpin+e3 and the STSWEL!VglobalAuditStore::addAuditEntry.

Third party monitoring tools may flag "IIS: ASP Application restarts" and "IIS: ASP Request Execution Time."

 

Resolution

Consider applying SharePoint 2010's Service Pack 2 *AND* the August 2013 Cumulative Update (or higher). Link: http://technet.microsoft.com/en-us/sharepoint/ff800847.aspx

More Information

Changing the HTTP Throttling threshold with PowerShell on the WFE from default of 500 to 750 is probably not going to ultimately help.  But this may be the first reaction some Admins consider trying to minimize the symptoms.   Requests are queuing because the worker threads are all waiting.  Increasing the throttling threshold probably won't do anything to avoid that problem.   The problem is not too many requests to process; it is the inability to process the requests.


Can't open a .xsn file | "X-Download-Options: noopen" | MIME "application/octet-stream"

$
0
0

 

After upgrading MOSS 2007 content databases to SP2010, an InfoPath form template (template.xsn) that in the past could be either opened or saved was now only able to be saved, not opened.

Comparing Fiddler2 traces of the traffic for the .xsn file on the MOSS2007 and SP2010 farms showed that the  key difference in the headers was this:  “X-Download-Options: noopen.”  Here's a great reference for that.  SharePoint 2010 and 2013 are a bit more strict here than MOSS 2007 was. 

Since the problematic header also showed clearly that that the content type was "application/octet-stream"  we added the necessary MIME type with the following PowerShell commands:

$webApplication = Get-SPWebApplication "http:/yourwebapplicationurl" 
$webApplication.AllowedInlineDownloadedMimeTypes.Add("application/octet-stream") 
$webApplication.Update()

 

 

Additional keywords:

Do you want to save this file?

 

 

Steps to Catch a Simple “Crash Dump” of a Crashing Process

$
0
0

 

 

Summary

 

When a user-mode process (such as w3wp.exe, owstimer.exe, iexplore.exe, or any .exe) is crashing (such that the process disappears unexpectedly from task manager and reappears soon after with a different PID number), arguably the best way to begin to determine the root cause of the crash is to catch a crash dump as that process is crashing. This blog offers two ways to trigger the crash dump and suggests a way to begin interpreting the dump.

 

The Choice between DebugDiag and WER

   

I highly recommend the use of DebugDiag as the tool to use to automatically trigger a crash dump as the process crashes and as the tool to begin analyzing the crash dump. The tool is simply the most flexible and customizable way to get simple crash dumps and advanced crash dumps. But since I'm taking here about simple crash dumps, and since it's not uncommon for the change management process to move too slowly, and since some IT groups have very restrictive tool installation approval process for their servers, sometimes DebugDiag cannot be installed on a server where a process is crashing, I also am going to offer steps here to use Windows Error Reporting (WER) to automatically trigger the crash dump. Often WER is adequate to get the crash dump. So I'll start with WER. But if you have permission to install DebugDiag on your server, feel free to skip the WER steps.

 

How to Set up WER for a Crash Dump

 

WER is already there! WER is already part of your operating system (in Win2008 and higher) and needs only to be configured.   You'll need to add a registry key.

As an example, to catch a total of two crash dumps of a crashing w3wp.exe process, you could use copy the following text into notepad, save it, and rename it to something like W3wpcrashdumps-to-C.reg.

Windows Registry Editor Version 5.00

   

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe]

"DumpFolder"=hex(2):63,00,3a,00,5c,00,64,00,75,00,6d,00,70,00,73,00,00,00

"DumpCount"=dword:00000002

"DumpType"=dword:00000002

   

This will make a total of 2 full user dumps (not mini-dumps but full dumps) and write the dumps to C:\dumps. 

In the registry it will look like this:

   

But you may not want to write the dumps to the system partition. You can send it to another drive with a few GB of free space instead.

So, as an example, to send the dumps to the D:\ drive you could use something like this:

Windows Registry Editor Version 5.00

   

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Windows Error Reporting\LocalDumps\w3wp.exe]

"DumpFolder"=hex(2):64,00,3a,00,5c,00,64,00,75,00,6d,00,70,00,73,00,00,00

"DumpCount"=dword:00000002

"DumpType"=dword:00000002

   

In the registry it will look like this:

 

As long as this registry key is there, expect dumps to be written every time any w3wp.exe crashes—up to a maximum of two dumps if DumpCount is set to 2.   So when you've collected enough dumps, don't forget to either delete the w3wp.exe key from the registry.

Of course if the crashing process is something other than a w3wp.exe, you'd want to create a different key under LocalDumps. For example, if OWSTimer.exe was crashing, you'd create a key for OWSTimer.exe.

References: http://msdn.microsoft.com/en-us/library/bb787181.aspx

 

INSTALL DEBUGDIAG

   

Assuming you did not configure WER with the steps above, install Debug Diagnostic 2.0 on the server suffering with a crashing process.  Download it from http://debugdiag.com.

When you launch debugdiag.msi it will give you an option to change the default installation path. If you prefer to not install tools to the system partition, be sure to select the Browse button in the earliest phase of the wizard.

 

   

LAUNCH DEBUGDIAG

   

Launch Debug Diagnostics 2.0 Collection from the list of programs.   

 

If UAE is enabled on the server, you may need to use the "Run as Administrator" option to avoid errors during launch.

   

   

SET UP A VERY BASIC CRASH RULE

   

When asked which rule type to choose, keep the bullet beside "Crash" and click NEXT

   

   

   

For "Select Target Type" you have some great choices.

  • If you need to get a dump of a process like owstimer.exe or iexplore.exe or anything not related to IIS, you should probably select "A specific process."
  • If you have a w3wp.exe that is crashing and you know which Application Pool it is associated with, you should probably go with "A specific IIS web application pool."
  • If you have a w3wp.exe that is crashing and you don't know which AppPool it is associated with, you should probably go with "All IIS/Com+ related processes." 

   

   

   

   

As an example, I'm selecting notepad.exe. It could be any other process.

 

 

 

Leave everything set to the default setting in the Advanced Configuration for now.  Just click NEXT.

 

   

   

   

Continue accepting the default settings and clicking next…

   

 

   

   

If you prefer that the .dmp files to be written to some place other than the default, select browse and guide it to another folder. Generally speaking it's probably good to not write the dumps to the system drive, especially if you have limited freespace.

   

Click Next.

   

Activate the rule when you're ready for the tool to start monitoring the process for a crash. . .

   

   

   

 

Just click YES here.

 

   

Note how the status is set to active and the userdump count is set to 0.  The userdump count should increase when a crash is detected.

 

You can also activate and deactivate the crash rule from this view.

   

 

 

   

   

WAIT

   

Feel free to log off the server while waiting for the crash to occur.  Since debugdiag runs as a service, you do not have to be logged into the machine.

   

This tool will monitor the process, watching and waiting for a crash to occur.  When the process begins to crash, the debugger will interrupt the process temporarily, freeze that process, write out everything in that process to a .dmp file, and then allow the process to crash and restart.

   

   

   

Preliminary Analysis of the Crash Dump

   

   

This step can be done from a server if (1) that server has outbound http access to the internet [specifically to Microsoft's public symbol servers] and (2) if you don't mind risking something that is fairly CPU intensive. It may make more sense to install Debug Diag 2.0 (or just the analysis piece) on a workstation that can access the internet and place the crash .dmp file on a share that it can reach.

Launch the Debug Diag Analysis program from the list of programs.

Place a checkmark beside CrashHangAnalysis. Don't select any other analysis rules.

Select "Add Data Files" and guide it to the crash dump.   

 

Select START ANALYSIS and wait for results to display.  

   

   

Zipping the Dump

   

If you'd like to zip the dump file up in preparation to upload to an engineer at Microsoft, here is a good way to do it.

Expand the debugdiag Tools menu, select Advanced Data Collection, select Create Full Cabinet file.   This should both collect and compress the event logs, the .net config files, the dump files, and more into one convenient .cab file.

   

 

   

You can locate the .cab file by clicking the icon of the manila file folder.

   

 

   

   

Making the Crash Rule More Sensitive

   

If this method above does not catch a crash and create a dump file when the crash occurs, you can edit the existing crash rule and add a breakpoint to make it more sensitive with the steps below.

Keep in mind, however, that this method may create a dump whenever a process is recycled or is otherwise gracefully shut down rather than when it actually crashes. So if, for example, you recycle your application pools at 2am every morning, and your crash rule creates a dump of the w3wp.exe at 2am, you might want to ignore and delete that dmp file.

 

 

 

 

 

 

What if the dump shows heap corruption?

 

If the dump analysis shows signs of heap corruption as the cause of the crash, you might need to adjust your crash rule to enable gflags (as seen below) and wait for another crash. Gflags can only be enabled if during the creation of the crash rule you selected "specific process." Also enabling gflags can have a profound impact on server performance. This is some advanced work that is probably best done with the guidance of a support engineer at Microsoft. The debugging can be challenging and there is also a good chance that there may be need to switch to another tool (such as iDNA/TTTracer).

 

 

   

Additional search keywords

   

 

919789 How to use the Debug Diagnostics tool to troubleshoot an IIS process that stops unexpectedly

http://support.microsoft.com/default.aspx?scid=kb;EN-US;919789

 

921464 How to use the Debug Diagnostics 1.0 tool to analyze a memory dump file

http://support.microsoft.com/default.aspx?scid=kb;EN-US;921464

 

Event Source: W3SVC

Event ID: 1009

Description: A process serving application pool 'xyz' terminated unexpectedly. The process id was '1234'. The process exit code was '0xc0000005'.

 

Event Source: W3SVC

Event ID: 1011

Description: A process serving application pool 'xyz' suffered a fatal communication error with the World Wide Web Publishing Service. The process id was '1234'.

 

Event Source: Application Popup

Event ID: 26

Description: Application popup: inetinfo.exe - Application Error : The instruction at "0x01b2dc59" referenced memory at "0x00000008". The memory could not be "read". Click on OK to terminate the program

 

Source: Microsoft-Windows-WAS

Event ID: 5011

Description: A process serving application pool 'XYZ' suffered a fatal communication error with the Windows Process Activation Service. The process id was '2780'. The data field contains the error number.

 

Source: .NET Runtime

Event ID: 1027

Description: Application: w3wp.exe Framework Version: v4.0.30319

Description: The process was terminated due to stack overflow.

 

Event ID: 1000

Description: Faulting application w3wp.exe, version …, time stamp …., faulting module xyz.dll, version …., time stamp …., exception code ….., fault offset ….., process id …., application start time …..

 

Source: Microsoft-Windows-WAS

Event ID: 5009

Description: A process serving application pool 'XYZ' terminated unexpectedly. The process id was '1234'. The process exit code was 'l'.

 

Event Source: W3SVC

Event ID: 1011

Description: A process serving application pool 'XYZ' suffered a fatal communication error with the World Wide Web Publishing Service. The process id was '1234'. The data field contains the error number.

 

Event ID: 1000

Description: Faulting application w3wp.exe, version 7.0.6001.18000, time stamp 0x47919ed8, faulting module kernel32.dll, version 6.0.6001.18000, time stamp 0x4791ada5, exception code 0xe0434f4d, fault offset 0x000000000002649d, process id 0x1e90, application start time 0x01ca00762fbfb6f3.

 

Access violation

Second-chance exception

 

The SharePoint 2010 Timer service terminated unexpectedly. It has done this 696 time(s). The following corrective action will be taken in 30000 milliseconds: Restart the service. (Event ID: 7031, Source: Service Control Manager)

The SharePoint 2010 Timer service terminated with service-specific error %%-2147467259. (Event ID:7024, Source: Service Control Manager)

adplus.vbs –crash

"error while attaching to process via the DbgSvc service. ReloadControlScriptFailed. Could not open handle to control script shared memory mutex.")

 

Several Good Ways to Trigger a “Hang Dump” of an Unresponsive Process

$
0
0

 

Introduction and Summary

 

Imagine a traffic jam where you can see cars and trucks backed up for miles. You can see the symptoms and know there is a problem. You know things have slowed to a crawl or to a stop. But that's all you can see from your vantage point. You can't see the choke point. You can't see what the real cause is of the traffic jam. All you can see are the lines of backed up cars. And it's your job to fix it! What do you do?

 

You can make guesses. "A car probably ran into another car and emergency response crews are probably slowing traffic down." That sounds reasonable.

But you have no idea which cars collided if indeed there was a collision. You have no idea if the emergency response crews are really there or not and if they're going to take care of the problem or not.

If only you could get a good glimpse of the root cause, right? Even just a good momentary snapshot of a few traffic cameras in the area would help unravel the mystery.

If you could see the snapshot from a webcam you might be surprised at what you find. . .

 

 

A parade of elephants?

That one snapshot can increase your understanding of the root cause of the problem can begin and you're far closer to finding a solution to the problem.

This is what I like about making "hang dumps" of user-mode processes when they're unhealthy. With a good memory dump made at the right time you can see what the various worker threads are doing. Some are doing work, some are waiting in a good way, one is causing a traffic jam, and several others are blocked by the jam. And with that snapshot of who is doing what, you get a chance to see what is causing the problem. You start to be able to see what is smoke and what is fire.

When a website hosted in IIS becomes inordinately slow or unresponsive, I am quick to recommend creating a dump of the hung w3wp.exe process.

When SharePoint workflows become unresponsive, I am quick to recommend creating a dump of the owstimer.exe process to begin to pinpoint the root cause.

When any process to become "hung," "jammed," "blocked," or otherwise unresponsive, I'm quick to trip a dump while the hang is occurring.

This blogpost recommends several good ways to create a "hang dump" of a process. First we'll see how to dump out a process with Task Manager. Then we'll see three ways to get the hang dump with Debug Diag 2.0.

 

Task Manager

 

Perhaps the quickest and easiest way on a Windows 2008, Windows 2008 R2, Windows 7, Windows 8, or Windows 2012 computer is to use task manager. If Outlook were unresponsive, for example, I would open Task Manager, select the Processes tab, find the process listed in the list, right-click it, select "Create Dump File," wait for the dump file to be written, and then click the option of End Task to kill the hung process. The beauty of this method is that Task Manager is already there. You don't have to install any tools. The memory dump it creates should be just as viable as dumps made by other tools.

Open task manager (one good way to do this is to press keyboard keys "Ctrl" + "Shift" + "Esc" simultaneously) and select the Processes tab.

If you know which process is unhealthy, you can locate it in the list of processes, right-click it, and select CREATE DUMP FILE.

Yeah, it can be that easy! Just make sure you dump it while it is unhealthy/unresponsive.

 

 

One common dilemma is that if you have multiple processes with the same name (often the case with w3wp.exe's) you may not know which one to dump. The main downside to using Taskman to get the dump is that sometimes it's difficult to figure out which process to dump. If you have a web server or SharePoint Web Front End server that has multiple Application Pools, sometimes it takes a bit of detective work to figure out which w3wp.exe corresponds to which application pool.

 

If you're not sure which one needs to be dumped, you could just methodically right-click and dump every one of the processes with the same process name.

Or maybe you can tell by the "user name" that the process runs as which w3wp.exe corresponds to which application pool. But that's not always going to work. Sometimes several App Pools might use the same user ID.

Or maybe you can tell by the size of the memory (private bytes) footprint. It's not uncommon for the unhealthy w3wp.exe to be the largest. But that's not always the case.

If the problem is due to high cpu, it may be quite obvious in taskman which process to dump. But often an unresponsive process has very low cpu. So cpu usage isn't always a good indicator.

One good way to figure out which w3wp.exe corresponds to which application pool is to run an appcmd command. Open a command prompt on the web server and run the following command to see which Application Pools line up with which PID numbers:

%windir%\system32\inetsrv\appcmd.exe list wp

 

 

Then of course I have to hunt around in Task Manager to find out how to view the PID numbers (process identifier) of the processes. But at least I can still quickly know which w3wp.exe is the one to dump. If you know which website is unresponsive, and you know which application pool that website is assigned to, and you know the pid number of that appPool, you should be able to figure out which PID to dump in Task Manager.

Another possible downside of using TaskMan for creating your dumps is that by default it will write the dump to a path like C:\Users\UserName\AppData\Local\Temp\ProcessName.DMP. That's not the easiest place to find. And maybe you don't want large dump files on your server's C drive.

 

Despite these two small drawbacks, all in all it is difficult to beat the convenience of the Taskman hang dump.

 

 

DebugDiag 2.0 – Installation and Launch

 

To have additional flexibility in making hang dumps consider installing Debug Diagnostics 2.0 on the server suffering with an unresonsive process.  Download it from http://debugdiag.com.

When you launch debugdiag.msi it will give you an option to change the default installation path. If you prefer to not install tools to the system partition, be sure to select the Browse button in the earliest phase of the wizard.

 

   

LAUNCH DEBUGDIAG

   

Launch Debug Diagnostics 2.0 Collection from the list of programs.   

 

 

If UAE is enabled on the server, you may need to use the "Run as Administrator" option to avoid errors during launch.

 

If you installed the tool to your system drive but would prefer that the memory dumps go to a different drive, expand the Tools menu and select Options and Settings.

 

 

Change the manual user dump save folder path and click OK

 

 

 

DebugDiag – Option 1: Create Full User Dump from the Processes Tab

 

After debugdiag launches, click the CANCEL button on the Select Rule Type window

 

 

Switch to the Processes tab in DebugDiag

Sort by process name or by whatever column makes the most sense.

For IIS web app pool problems, note especially the column for Web Application Pool name. With this cool feature there is no need to run appcmd list wp.

To trigger the hang dump, right-click the process you wish to dump and select "Create Full Userdump."

Be sure not to select MINI userdump.

 

DebugDiag – Option 2: Dump ALL the IIS processes from the Tools menu

 

If all you know is that one of your IIS websites has a problem and you don't have time to figure out which application pool to focus on,

you might consider expanding the Tools menu

and selecting CREATE IIS/COM+ HANG DUMP.

This will create hang dumps of all the IIS related processes.

 

 

DebugDiag – Option 3: Set up a performance rule to detect the problem and automagically dump the process

 

 

Sometimes the hangs happen at 4 AM and no one is around to respond to the hang.

In that case, you might want to create a performance rule to detect the hang and automatically make the dump.

From the rules tab, select Add Rule, place a bullet beside Performance, and click NEXT.

 

 

I'm not going to go through these scenarios here, but check out how cool these options are.

Your "performance rule" can predicate actions (such as triggering a hang dump) based on what perf counters say or based on checking a URL for responsiveness.

Definitely a cool option to have!

 

 

 

 

 

 

 

 

Preliminary Analysis of the Hang Dump

   

   

This step can be done from a server if (1) that server has outbound http access to the internet [specifically to Microsoft's public symbol servers] and (2) if you don't mind risking something that is fairly CPU intensive. It may make more sense to install Debug Diag 2.0 (or just the analysis piece) on a workstation that can access the internet and place the crash .dmp file on a share that it can reach.

Launch the Debug Diag Analysis program from the list of programs.

Place a checkmark beside CrashHangAnalysis. Don't select any other analysis rules.

Select "Add Data Files" and guide it to the crash dump.   

 

Select START ANALYSIS and wait for results to display.  

   

   

Zipping the Dump

   

If you'd like to zip the dump file up in preparation to upload to an engineer at Microsoft, here is a good way to do it.

Expand the debugdiag Tools menu, select Advanced Data Collection, select Create Full Cabinet file.   This should both collect and compress the event logs, the .net config files, the dump files, and more into one convenient .cab file.

   

 

   

You can locate the .cab file by clicking the icon of the manila file folder.

   

 

   

 

 

PROCDUMP

 

Some people really like Procdump. I haven't used it much myself but I thought it was worthy of mention.

http://technet.microsoft.com/en-us/sysinternals/dd996900

ProcDump v6.0

By Mark Russinovich

Introduction

ProcDump is a command-line utility whose primary purpose is monitoring an application for CPU spikes and generating crash dumps during a spike that an administrator or developer can use to determine the cause of the spike. ProcDump also includes hung window monitoring (using the same definition of a window hang that Windows and Task Manager use), unhandled exception monitoring and can generate dumps based on the values of system performance counters. It also can serve as a general process dump utility that you can embed in other scripts.

 

 

Steps to Log all .net Exceptions to a Log file with Debug Diag 2.0

$
0
0

 

 

Sometimes it's good to know what exceptions a process like w3wp.exe is throwing. ASP.net is pretty good about making its complaints known in the form of exceptions.  Many or perhaps most exceptions can be ignored.  But if you're trying to troubleshoot a mysterious problem that isn't leaving clues in the event logs, this may be a good way to begin to unravel the problem. Sometimes you can see them logged in the Application event log—but usually not. Sometimes you can see them in the ULS logs of SharePoint servers—but usually not. You could get the developer can add some additional instrumentation to the code to log the exceptions to a log file. Or you might use Todd Carter's SNAP tool to see what .net exceptions are being thrown. Or you can, as I'll suggest here, try to use Debug Diagnostics 2.0 to log all .net exceptions to its log file while reproducing a problem.  

 

Install DebugDiag 2.0 on the server. Location: http://debugdiag.com

If you can't get permission to install it with the .msi, consider the xcopy option here.

 

Launch DebugDiag 2.0 Collection

Confirm that "Crash" is selected as the rule type and click NEXT

Player that I am in the SharePoint universe, I tend to focus on a specific w3wp.exe that corresponds to a specific IIS Application Pool.

Assuming you know which Application Pool to focus on, select "A specific IIS web application pool."

Select the Application Pool in focus and click NEXT

 

For good measure I like to log some of the native code exceptions (non-.net) as well as the managed/.net exceptions.

SharePoint uses both native and managed code. This will help give some insight into the native side.

So change action type to "log stack trace" and change action limit to a high number (like 9999 or 999999).

Click the EXCEPTIONS button

 

Click the ADD EXCEPTION button

 

On the left side, select CLR (.NET) 1.0 – 3.5 Exception

On the right side, set Action Type to "Log Stack Trace" and Action Limit to a high number (like 9999 or 99999)

Click OK

 

 

Click the SAVE&CLOSE button

 

Click NEXT

 

Feel free to change the Rule Name to something like "Exception logging for Application Pool XYZ" if you please.

Feel free to change the rule output location.

Click NEXT

 

Place a bullet beside "Do not activate the rule at this time" and click FINISH.

If you want to have a "baseline" to have a record of which exceptions are "normal," right-click the rule, activate it, generate some activity on the website without duplicating the problem you're hoping to troubleshoot, deactivate the rule, and then proceed with the next steps.

 

It's probably a good idea to get additional debug information added to the log file.

To do so, expand the tools menu, select Options and Settings

 

Place a checkmark beside "Enable raw debugger logs. Includes debug output and engine messages."

Click OK

 

Get everything as ready as possible to reproduce the problem. If possible, get to the point where you are one simple mouse-click away from reproducing your problem.

When you're ready to reproduce the problem, right-click your rule and activate it.

 

Reproduce your problem quickly

After you see your symptom or error message in the browser, deactivate the rule.

 

Find your new log files by clicking the icon of the manila folder. This will open the folder C:\Program Files\DebugDiag\Logs

 

The file you're looking for may have a name that looks something like this:

w3wp__DefaultAppPool__PID__4840__Date__07_19_2013__Time_04_02_18PM__81__Log.txt

 

If your application is throwing several exceptions every second, doing this type of logging can really bog down the machine. Beware. And note these cool new features in 2.0 from the Tools > Options and Settings > Crash Rule Preferences tab. . .

 

 

 

 

More details here: http://blogs.msdn.com/b/debugdiag/archive/2013/10/02/did-you-know.aspx

 

 

 

 

 

 

Additional keywords:

 

System.InvalidCastException

System.OutOfMemoryException

System.IO.FileNotFoundException

System.NullReferenceException

System.CannotUnloadAppDomain

System.Threading.SynchronizationLock

System.InvalidOperationException

System.OverflowException

System.Data.SqlClient.SqlExeption

System.Data.VersionNotFoundException

System.ArgumentException

System.ExecutionEngineException

System.ArgumentOutOfRangeException

System.IndexOutOfRangeException

System.Net.WebException

System.Security.SecurityException

 

Troubleshooting the vague “Cannot complete this action” owssvr.dll error

$
0
0

 

 

So what can you possibly do when you try to do something simple in SharePoint, like editing a view, and you see the following error in your browser?

 

Error

Cannot complete this action.

Please try again.

Troubleshoot issues with Microsoft SharePoint Foundation.

 

 

The only other clue you have is the presence of "/_vti_bin/owssvr.dll?CS=65001" in your address bar.

There is no correlation ID to focus on. And no matter how long you comb through the ULS logs, there are just no clues whatsoever.

What do you do?

 

The first thing I did in this scenario was to try to amp up the level of verbosity in ULS logging to verboseEX. Steps:

1.       During a server maintenance window, log onto the central admin server as a Farm Admin

2.       Open the SharePoint 2010 Management Shell (or PowerShell)

3.       Run the following commands:

a.       New-SPLogFile        [Note: this starts a new ULS log]

b.      Set-SPLogLevel -TraceSeverity VerboseEX        [Note: this sets all logging to super high levels]

4.       Note the time on the server

5.       Begin to reproduce the problem

6.       After problem has been sufficiently reproduced run the following commands

a.       New-SPLogFile

b.      Clear-SPLogLevel          [Note:  This sets the logging level back to normal/default]

7.       Create a new folder to handle ULS logs (example here:  D:\Logs)

8.       Run this command: Merge-SPLogFile -Path "C:\Logs\FarmMergedLog.log" -Overwrite -StartTime "10/11/2013 16:00" – EndTime "10/11/2013 16:15"

·         NOTE: path, date, and times may vary

·         NOTE: this command is supposed to collect the ULS logs from every server in the farm and merge them into one biiiiiiiiig logfile.   It's important to give it a specific time range.  Details.

 

But to my dismay, even verboseEx level ULS logs were totally disappointing. No clues to be found there. Zero.

 

When ULS logs disappoint me, I'm usually pretty quick to turn to DebugDiag. So we installed DebugDiag 2.0 on the WFE (this farm fortunately only had one WFE and that makes it easy to guess which WFE your traffic is going to) and began to set up the crash rule to log all exceptions per my steps here. The log file that DebugDiag generated while we reproduced the problem showed something unexpected in one of the stack traces of a thread that was throwing a first chance exception.

 

Child-SP RetAddr Call Site

000000002c9bddb0 000007ff0024c51d Microsoft.SharePoint.SPListCollection.GetListByName(System.String, Boolean)

000000002c9bde30 000007ff0024c0d5 .(Microsoft.SharePoint.SPWeb)

000000002c9bde80 000007fef389ea69 .()

000000002c9bdf10 000007fef374a55c Microsoft.SharePoint.SPSecurity+<>c__DisplayClass4.<RunWithElevatedPrivileges>b__2()

000000002c9bdf90 000007fef36189a2 Microsoft.SharePoint.Utilities.SecurityContext.RunAsProcess(CodeToRunElevated)

000000002c9bdfe0 000007fef3618a9d Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(System.Threading.WaitCallback, System.Object)

000000002c9be080 000007ff0024986b Microsoft.SharePoint.SPSecurity.RunWithElevatedPrivileges(CodeToRunElevated)

000000002c9be0e0 000007ff00249698 .()

000000002c9be150 000007ff00249549 ..ctor()

000000002c9be1a0 000007ff002490bd .()

000000002c9be210 000007feee7059b0 SusQtech.Products.UrlManager.HttpModule.(System.Object, System.EventArgs)

000000002c9be290 000007feee6f671b System.Web.HttpApplication+SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

000000002c9be2f0 000007feeede3971 System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)

000000002c9be390 000007feeedd43b2 System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)

000000002c9be520 000007feeedb5df9 System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback)

000000002c9be570 000007feeeeddde1 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)

000000002c9be690 000007feeeedd9ab System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)

000000002c9be810 000007feeeedcc14 System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)

000000002c9be870 000007fef833b1fb DomainNeutralILStubClass.IL_STUB(Int64, Int64, Int64, Int32)

 

We retracted the SusQTech URL Manager solutions, ran IIS reset, and confirmed that the problem went away. I recommended to the server admin that he contact support from the vendor and see if they had newer versions or private fixes that might avoid the problem.

 

Although we didn't try it this time, we might have been able to find the same information (see which httpmodules were at play here anyway) with some IIS level failed request tracing.

 

 

How to set up failed request tracing for Slow Pages in IIS 7

$
0
0

 

These steps can be helpful for troubleshooting web pages that serve slowly.

Open the IIS manager, select the site that is having problems, select Failed Request Tracing from the far right column.

 

 

 

Set a checkmark beside ENABLE

 

Select a path for the log file to be written to. You may need to ensure that the account the application pool uses has permission to write to this location.

 

I don't usually care for more than 50 trace file.

 

 

 

Select the Failed Request Tracing Rules icon from the center column.

 

 

Typically I select "All content."

 

 

 

 

Setting a range of 200 to 500 will catch pretty much everything that gets past http.sys and to an application pool.

 

Setting "time taken" to 5 seconds makes it so that it will only log requests that take five or more seconds to serve.

 

 

 

 

 

 

 

 

If the site is a SharePoint site, don't forget about Developer Dashboard.

IIS Health Checking can Prevent the Creation of a W3WP.exe Userdump

$
0
0

 

 

Problem

 

Sometimes when we're trying create a usermode dump of a w3wp.exe process something sabotages the attempt. The dmp file isn't successfully created and the dump-triggering tool balks.

When using Taskmanager to try to create the dump, the error is:

Dump Process

The operation could not be completed.

Only part of a ReadProcessMemory or WriteProcessMemory request was completed.

OK

 

 

When using DebugDiag 2.0 to try to create the dump, the error is:

Debug Diagnostic Tool

Could not create dump file *.dmp for process id *.

GetLastError returns 0x8007012B.

 

 

This scenario is most common when the w3wp.exe is large (in terms of virtual bytes) and the web server may be a bit taxed on either CPU or memory. The problem may not happen when trying to dump out small w3wp.exe processes.

 

Root Cause

 

When you're making a memory dump of a usermode process, everything in the process gets frozen in time while the dmp file is written out. While everything (all the threads) is frozen inside the w3wp.exe, IIS health checking is "pinging" the Application Pool to look for problems like unresponsiveness. If the w3wp.exe seems unresponsive, the Windows Process Application Service (WAS) will recycle that Application Pool.

The sign of this happening is in the System Event Log. Look for WAS as the source of the event and 5010 as the event ID. Event ID 5010 will say something like, "A process serving application pool . . . failed to respond to a ping. The process id was . . ."

 

 

 

Workaround

 

By default, WAS will ping the appPool every 30 seconds and gives it 90 seconds to respond. If the worker process can't respond, WAS will recycle the Application Pool. The unresponsive w3wp.exe disappears and a fresh one takes its place.

There are a few options to consider.

  1. You can try dumping the w3wp.exe sooner while its smaller. If you're troubleshooting a memory leak however, you may want to dump the process while its big.
  2. You can set Ping to disabled for the AppPool in the IIS manager. Wait for a server maintenance window, open the INETMGR, drill down to the Application Pools, find and select the AppPool that you're trying to get a dump of, select ADVANCED SETTINGS, scroll down to PING ENABLED, and change from TRUE to FALSE.
  3. Or change the Ping Maximum Response time to number higher than 90 and/or the Ping Period to some number higher than 30.

 

 

 

 


An Arcane Error with MOSS 2007’s Recycle Bin

$
0
0

 

Normally I wouldn't bother making a blog that probably only applies to MOSS 2007. But while solving for this error message . . .

 

Error

You must first restore the original list in order to restore the folder

Troubleshoot issues with Windows SharePoint Services.

 

. . . I was surprised at how there was just no information anywhere on this error anywhere. Figuring someone will run into this, I thought I'd fill the gap.

The problem and fix were ultimately quite simple. A site collection owner had deleted a document library, recreated the library manually, and then attempted to restore the documents and folders from the recycle bin. But he couldn't restore from the recycle bin. He got the error. The administrator then tried to restore folders or files from the recycle bin and got the same error message. ULS logs were not useful at all.

The problem was that we didn't know exactly what the site collection owner had done. We didn't know he had recreated the document library. So the Admin didn't know to look harder in the recycle bin for the doc lib. After deleting the new doclib he could restore the old doclib and proceed to restore the documents and folders.

In case you are unable to fully delegate Search Administration in SP2013

$
0
0

 

Problem:

 

When attempting to delegate SharePoint 2013 Search Administration to a small team/group, we were able to delegate everything except for the "Result Sources" and "Query Rules" pages/links, as seen in yellow highlight below.

 

 

 

 

Clicking either page resulted in the "Sorry, this site hasn't been shared with you" (Access Denied/ Access Required) message despite having done "all the right things."

 

 

 

 

If we added the delegated admin group to the farm administrators group, it all works of course. But we we're trying to taking it that far.

 

 

Solution:

 

This was resolved in the October 2013 Cumulative Update for SP2013 (and higher). Link: http://technet.microsoft.com/en-us/sharepoint/jj891062.aspx

 

 

 

 

 

 

 

 

 

Three Ways to Automate a “Hang Dump” in DebugDiag 2.0

$
0
0

 

Normally I prefer for the server admin to manually trigger a hang dump (see http://blogs.msdn.com/b/chaun/archive/2013/11/15/several-good-ways-to-trigger-a-hang-dump-of-an-unresponsive-process.aspx) when the process is clearly unresponsive and end-users are complaining. That way we have human intelligence working to ensure that the hang dump is made while the process is obviously unresponsive. Timing is important. There's no point in making a hang dump of a process that isn't hung up.

But there are times when it's just not feasible for the server admin to manually trigger a hang dump at a good time. For example, there may be times when the process becomes unresponsive in the middle of the night and there is no one around to report the problem to the help desk. Or maybe help desk just creates a ticket and the admin finds the ticket on the hang issue in the morning. Perhaps the process is still hanging around and still hung (unlikely but possible) or orphaned and the admin makes a memory dump of the process—but there's just no activity in the dump. Sometimes it is good to trigger the hang dump soon after the hang occurs rather than hours after the fact.

One of cool things about Debug Diag 2.0 (http://debugdiag.com) is that there are no less than three ways to automate the triggering of a "hang dump" of a process. I don't know of any other tool that can do anything quite like it.

I'm not trying to give an in-depth guide to the process here. Just an introduction.

 

The Perfmon Counter Option

 

You start with the performance rule. . .

 

 

You immediately have a choice between Perfmon counters or http response times.

If you've been troubleshooting a performance problem with performance monitor and know which Perfmon objects and counters to focus on already, that might be a really good way to go. If not, you'll probably want to go with http response times.

I'm going to give a quick glimpse of the Perfmon counter option first.

Sorry to be Captain Obvious here, but you select the Add Perf Triggers button.

Of course you're going to want to focus on the local computer. Don't bother trying to monitor a different server because debugdiag is only going to trip a dump on the local server.

You've got many choices here.

You could focus on high cpu. (When CPU reaches a high level, trip a memory dump.)

You could focus on memory (when virtual bytes or private bytes reaches a high level, trip a dump).

You could do something like focus on 500 (internal server error) responses being sent, as seen below.

Or you could focus on ASP.net requests queuing, for example. When the queuing begins, trip a dump. Not a bad idea. But I'd only do it if you know for a fact that asp.net requests have been queuing when the hang (or slow performance) issue occurs. This assumes prior knowledge of the symptoms.

One last observation about this Perfmon Rule is that it can be used for any process. You don't have to use it for an IIS process.

There are many options for brushing up on Perfmon to know what is normal and what is abnormal. Here are some references to consider.

http://technet.microsoft.com/en-us/library/ff758658.aspx

Monitoring and maintaining SharePoint Server 2013

http://technet.microsoft.com/en-us/library/cc730608(v=WS.10).aspx

Monitor Activity on a Web Server (IIS 7)

http://msdn.microsoft.com/en-us/library/ms972959.aspx

ASP.NET Performance Monitoring, and When to Alert Administrators

http://technet.microsoft.com/en-us/library/cc736996(v=WS.10).aspx

Monitoring ASP.NET Performance

 

 

 

A second way to go…

 

… is to stick with http response times instead of Perfmon counters.

This method only applies to websites (or web applications) running in Microsoft IIS.

We start the rule the same way. . .

But this time we're selecting the second option.

 

Click Add URL. . .

 

 

Now here you have a choice between ETW tracing or URL Pinging.

The ETW tracing option is new to DebugDiag 2.0. It wasn't in DD 1.2.

If you go with ETW tracing, you do not have to specify a specific page to monitor. You can leave it blank to monitor everything that is sent to IIS, you can specify a specific website on that iis server (yes, this is only useful for IIS web servers), or a specific virtual directory.

Those are some cool options!

 

A third way…

 

Or you can instruct debugdiag to send some "pings" (not actually icmp pings) against a specific web page. Here you probably need to specify a page or else just use the default page. Either way it is only going to focus its "pings" against one specific page.

One important thing to keep in mind here is that the URL to ping needs to be a url that goes directly to one web server that debugdiag is installed on. Don't specify, for example, a URL here that goes to a load balancer that then gets redirected to any of five different web servers / WFEs. If you want to use this option in a SharePoint farm, and you only have one URL that works, you might consider the possibility (use at your own risk) of creating an Alternate Access Mapping. And if you do create an AAM to go to one server, you will also probably have to add the appropriate binding in the IIS manager for the web site. (Adding an AAM wont add a binding. Extending a web site in Central Admin will add the binding but adding an AAM won't.)

You can definitely tweak the frequency of the ping and the timeout value too.

Select your application pool that you want to dump out when the url proves unresponsive.

 

 

Also you have some additional settings that you can use if you like.

I'd probably use the "generate a userdump every 45 seconds" option if I were troubleshooting a high-cpu issue. And I'd probably tell it to stop generating after three (or possibly five) userdumps.

I'd only select full userdumps, not mini userdumps. But that's just me. Others may differ. Minidumps rarely help in my experience.

 

 

 

Footnote Numbering Trick for Word 2013

$
0
0

 

Here are some steps to set footnotes to start their numbering over at 1 for each chapter of a book in Microsoft Word.

 

First, insert "section breaks."

 

The first thing that needs to happen is inserting a "section break" (not a mere page break) before the title of each different essay.  

So if you have a total of seven chapters, for example, you'll need to insert seven different section breaks.  (Note: Hitting CTRL+Enter for a carriage return is not the same thing.) 

Move the cursor to the left of the first character of the essay title. 

Move the mouse arrow to the Page Layout tab on the Word ribbon, select the drop-down triangle beside BREAKS, and select NEXT PAGE.

 

Insert a section break

  1. On the Page Layout tab, in the Page Setup group, click Breaks.

             

     

    Second, change the advanced footnote settings

     

    After your section breaks are set, visit the REFERENCES tab on the Word Ribbon.  Find "Footnotes" and click the arrow-like icon to its right.

     

     

    [By the way, if you have any endnotes that need to be converted to footnotes, you can do that here by selecting one and clicking the CONVERT button.]

    Change the value for NUMBERING from "Continuous" to "Restart each section," as seen below.

    Also ensure that "Apply Changes to" is set to "Whole document," as seen below.

     

     

               

     

    One possible Gottcha

     

    If the footnotes still refuse to reset their numbering at 1, one possibility to consider is the question of whether there are some unaccepted tracking or comments that need to be accepted.   One way to investigate this possibility is to visit the Review tab in the Word ribbon, and start Accepting/Rejecting…

     

    If you see the indicator below, tracking and commenting isn't the problem.

     

     

WebPIcmd /offline /Products:WorkflowManager versus /Products:WorkflowManagerRefresh

$
0
0

 

Today I had my first opportunity/need to use the webpicmd.exe tool (part of the Web Platform Installer) to attempt to download the installation bits for workflow manager, workflow client, and service bus. This needed to be done for an offline installation on servers with no access to the internet.

But when I attempted to cache the Workflow Manager locally the way that the Technet article ["Install and configure workflow for SharePoint Server 2013" @ http://technet.microsoft.com/en-us/library/jj658588(v=office.15).aspx ] said to do it (and several other blogs agreed) I ran into an unexpected problem. When I ran webpicmd.exe /offline /Products:WorkflowManager, the tool searched several feeds and said it couldn't find what I was looking for.

Error: "Loading products in offline feeds… Can't find product with id WorkflowManager."

 

 

Apparently WorkflowManager was replaced with WorkflowManagerRefresh in January 2014. That was evident when I ran Webpicmd /List /ListOption:Allto see all available packages and their abbreviations. The ones that were relevant to me were:  

 

 

The following commands ran successfully to cache the installer bits locally:

  • Webpicmd /offline /Products:WorkflowClient                      /Path:D:\WebPIOfflineFiles
  • Webpicmd /offline /Products:WorkflowCU2             /Path:D:\WebPIOfflineFiles
  • Webpicmd /offline /Products:WorkflowManagerRefresh /Path:D:\WebPIOfflineFiles
  • Webpicmd /offline /Products:ServiceBus                  /Path:D:\WebPIOfflineFiles
  • Webpicmd /offline /Products:ServiceBus_1_1                      /Path:D:\WebPIOfflineFiles
  • Webpicmd /offline /Products:ServiceBusCU1                       /Path:D:\WebPIOfflineFiles

 

 

For a different point of reference, here is what WebPUI 4.6 showed when I searched for "workflow" or "service bus":

 

 

 

 

 

Additional Key Words:

 

Workflow Manager CU2 to get to 1.0 Refresh

Workflow Manager Client 1.0 Refresh

Service Bus 1.0

Service Bus 1.0 Cumulative Update 1

Office Web Apps Exception: “An item with the same key has already been added”

$
0
0

 

 

Scenario and Symptom:

 

An Office Web Apps 2013 server is talking to a SharePoint 2013 server and the following shows up in the ULS log (C:\ProgramData\Microsoft\OfficeWebApps\Data\Logs\ULS) of the OWA/WAC server:

 

03/14/2014 10:19:20.90         w3wp.exe (0x1CDC)    0x2854 Office Web Apps         Office Web Apps common            agq6x  Exception        WAC Server FrontEnd unhandled exception [0] System.ArgumentException: An item with the same key has already been added.     at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)     at Microsoft.Office.Web.Apps.Environment.WacServer.WSConfigAdapter.TryGetValue[T](String settingName, T& value)     at Microsoft.Office.Web.Apps.Common.WopiDocument.ValidateHostAndSetFileSource()     at Microsoft.Office.Web.Apps.Common.WopiDocument..ctor(String fileRep, String accessToken, Int64 accessTokenTtl, String version, String sessionContext, WopiType wopiType)     at Microsoft.Office.Web.Apps.Common.WopiDocument.IsValidWopiQueryString(String querySignature, BaseDocumentType docType, Boolean createDoc, BaseDocument& doc)     at Microsoft.Office.Web.Apps.Common.WopiDocument.CreateFromQuerySignature(String querySignature)     at Microsoft.Office.Web.Apps.Environment.WacServer.WSMainStorage.GetBaseDocumentFromContext(HttpContext context, String rawHostDocumentId)     at Microsoft.Office.Web.Host.WacServer.WebWordViewer.WordViewerFrame.OnPreRender(EventArgs e)     at System.Web.UI.Control.PreRenderRecursiveInternal()     at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) StackTrace:  at uls.native.dll: (sig=35ebf2aa-983a-4c4a-a61b-a0d5e84ac5d0|2|uls.native.pdb, offset=26E6A) at uls.native.dll: (offset=1F8A9)    29e37d01-8664-4b81-a916-bd4f92c34805

 

There aren't many good clues as to what key they're talking about and what item is already there.

 

 

Solution:

 

 

This problem may be caused by having duplicate entries in the allowlist for domains.

Check this ini file on the OWA/WAC server for duplicate entries: C:\ProgramData\Microsoft\OfficeWebApps\Data\FarmState\allowList.ini file

If there is a domain that is listed twice in there, that is probably the cause of this problem. But do not attempt to remove any duplicates from the .ini file.

As an alternative to opening the .ini file, you can run this PowerShell cmdlet: Get-OfficeWebAppsHost

More info:

http://technet.microsoft.com/en-us/library/jj219446(v=office.15).aspx

The Get-OfficeWebAppsHost cmdlet returns the list of host domains to which Office Web Apps Server allows file operations requests, such as file retrieval, metadata retrieval, and file changes. This list, known as the Allow List, is a security feature that prevents unwanted hosts from connecting to an Office Web Apps Server farm and using it for file operations without your knowledge.

The wildcard * is assumed for any domain that appears on the Allow List so that requests to all subdomains are also allowed. For example, if the domain contoso.com is on the Allow List, then Office Web Apps Server also allows requests to the domains corp.contoso.com and dev.contoso.com. Requests to other domains (such as fabrikam.com) are not allowed.

 

You can consider removing the duplicate using this cmdlet: Remove-OfficeWebAppsHost -Domain <String>

More info:

http://technet.microsoft.com/en-us/library/jj219453(v=office.15).aspx

The Remove-OfficeWebAppsHost cmdlet removes the specified host domain from the Allow List. The Allow List contains the host domains to which Office Web Apps Server allows file operations requests.

 

 

 

 

Root Cause:

 

In our case, we tripped an exception dump of the w3wp.exe process on the OWA server that served the Web Word Viewer while reproducing the problem.

Since psscor4.dll extension technically doesn't work for .net 4.5, and since this is technically .net 4.5 (even though it looks like 4.0), I loaded SOS.dll from C:\Windows\Microsoft.NET\Framework64\v4.0.30319 into windbg.exe while examining the memory dump.

 

!dae (dump all exceptions) showed these:

 

Exception Type        : System.ArgumentException

Message: An item with the same key has already been added.

Exception Method Table: 000007FEF7EA1F08

Exception Object      : 00000003FF8BE328

HResult: 80070057

InnerException: <none>

StackTrace:

   000000001070DCD0 000007FEF8A5C70C System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].Insert(System.__Canon, System.__Canon, Boolean)

   000000001070DD60 000007FE9982CAAC Microsoft.Office.Web.Apps.Environment.WacServer.WSConfigAdapter.TryGetValue[[System.__Canon, mscorlib]](System.String, System.__Canon ByRef)

   000000001070DE10 000007FE99C61838 Microsoft.Office.Web.Apps.Common.WopiDocument.ValidateHostAndSetFileSource()

   000000001070DEE0 000007FE99C613B0 Microsoft.Office.Web.Apps.Common.WopiDocument..ctor(System.String, System.String, Int64, System.String, System.String, Microsoft.Office.Web.Apps.Common.WopiType)

   000000001070DF30 000007FE99C52A03 Microsoft.Office.Web.Apps.Common.WopiDocument.IsValidWopiQueryString(System.String, Microsoft.Office.Web.Common.EnvironmentAdapters.BaseDocumentType, Boolean, Microsoft.Office.Web.Common.EnvironmentAdapters.BaseDocument ByRef)

   000000001070DFD0 000007FE99C61291 Microsoft.Office.Web.Apps.Common.WopiDocument.CreateFromQuerySignature(System.String)

   000000001070E020 000007FE99C611EF Microsoft.Office.Web.Apps.Environment.WacServer.WSMainStorage.GetBaseDocumentFromContext(System.Web.HttpContext, System.String)

   000000001070E060 000007FE99BF9F2A Microsoft.Office.Web.Host.WacServer.WebWordViewer.WordViewerFrame.OnPreRender(System.EventArgs)

   000000001070E0E0 000007FEE2D4BCD1 System.Web.UI.Control.PreRenderRecursiveInternal()

   000000001070E130 000007FEE2D6EDD9 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)

 

 

 

Exception Type        : System.Web.HttpUnhandledException

Message:

Exception Method Table: 000007FEE2EEF828

Exception Object      : 00000003FF8BE738

HResult: 80004005

InnerException:

 

   Exception Type        : System.ArgumentException

  Message: An item with the same key has already been added.

   Exception Method Table: 000007FEF7EA1F08

   Exception Object      : 00000003FF8BE328

   HResult: 80070057

   InnerException: <none>

   StackTrace:

      000000001070DCD0 000007FEF8A5C70C System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].Insert(System.__Canon, System.__Canon, Boolean)

      000000001070DD60 000007FE9982CAAC Microsoft.Office.Web.Apps.Environment.WacServer.WSConfigAdapter.TryGetValue[[System.__Canon, mscorlib]](System.String, System.__Canon ByRef)

      000000001070DE10 000007FE99C61838 Microsoft.Office.Web.Apps.Common.WopiDocument.ValidateHostAndSetFileSource()

      000000001070DEE0 000007FE99C613B0 Microsoft.Office.Web.Apps.Common.WopiDocument..ctor(System.String, System.String, Int64, System.String, System.String, Microsoft.Office.Web.Apps.Common.WopiType)

      000000001070DF30 000007FE99C52A03 Microsoft.Office.Web.Apps.Common.WopiDocument.IsValidWopiQueryString(System.String, Microsoft.Office.Web.Common.EnvironmentAdapters.BaseDocumentType, Boolean, Microsoft.Office.Web.Common.EnvironmentAdapters.BaseDocument ByRef)

      000000001070DFD0 000007FE99C61291 Microsoft.Office.Web.Apps.Common.WopiDocument.CreateFromQuerySignature(System.String)

      000000001070E020 000007FE99C611EF Microsoft.Office.Web.Apps.Environment.WacServer.WSMainStorage.GetBaseDocumentFromContext(System.Web.HttpContext, System.String)

      000000001070E060 000007FE99BF9F2A Microsoft.Office.Web.Host.WacServer.WebWordViewer.WordViewerFrame.OnPreRender(System.EventArgs)

      000000001070E0E0 000007FEE2D4BCD1 System.Web.UI.Control.PreRenderRecursiveInternal()

      000000001070E130 000007FEE2D6EDD9 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)

 

StackTrace:

   000000001070BC50 000007FEE396CDA7 System.Web.UI.Page.HandleError(System.Exception)

   000000001070BD40 000007FEE396DB53 System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)

   000000001070E1F0 000007FEE396D795 System.Web.UI.Page.ProcessRequest(Boolean, Boolean)

   000000001070E260 000007FEE34AD934 System.Web.HttpContext.InvokeCancellableCallback(System.Threading.WaitCallback, System.Object)

   000000001070E2C0 000007FEE39ADD84 System.Web.UI.Page.LegacyAsyncPageBeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)

   000000001070E330 000007FEE2D76262 System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()

 

 

 

0:036> !dso

The version of SOS does not match the version of CLR you are debugging.  Please

load the matching version of SOS for the version of CLR you are debugging.

CLR Version: 4.0.30319.19132

SOS Version: 4.0.30319.18063

OS Thread Id: 0x2854 (36)

RSP/REG          Object           Name

r13              00000003ff8be738 System.Web.HttpUnhandledException

0000000010705C40 00000003ff8be738 System.Web.HttpUnhandledException

0000000010705CA8 00000003ff8be738 System.Web.HttpUnhandledException

0000000010705D10 00000003ff8be738 System.Web.HttpUnhandledException

0000000010705DF0 00000003ff8be738 System.Web.HttpUnhandledException

0000000010705EA8 00000003ff8be738 System.Web.HttpUnhandledException

0000000010706340 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

0000000010706358 00000000ff706918 ASP.global_asax

0000000010706360 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

0000000010706388 00000003ff891b60 ASP.wordviewerframe_aspx

0000000010706390 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010706398 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010706660 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010706678 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

00000000107066B8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010706890 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

00000000107068A8 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

00000000107068E8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010706BA0 00000003ff8be738 System.Web.HttpUnhandledException

0000000010706F70 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010706F88 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

0000000010706FC8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010707448 00000000ff7078e8 System.Web.PipelineModuleStepContainer

00000000107074A8 00000003ff8be738 System.Web.HttpUnhandledException

00000000107075C0 00000003ff8be738 System.Web.HttpUnhandledException

00000000107078C0 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

00000000107078D8 00000000ff706918 ASP.global_asax

00000000107078E0 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

0000000010707908 00000003ff891b60 ASP.wordviewerframe_aspx

0000000010707910 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010707918 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010707A80 00000003ff8be738 System.Web.HttpUnhandledException

0000000010707B80 00000003ff8be738 System.Web.HttpUnhandledException

0000000010707BD0 00000003ff8be738 System.Web.HttpUnhandledException

0000000010707BE8 00000003ff8be738 System.Web.HttpUnhandledException

0000000010707C50 00000003ff8be738 System.Web.HttpUnhandledException

0000000010707D30 00000003ff8be738 System.Web.HttpUnhandledException

0000000010708270 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

0000000010708288 00000000ff706918 ASP.global_asax

0000000010708290 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

00000000107082B8 00000003ff891b60 ASP.wordviewerframe_aspx

00000000107082C0 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

00000000107082C8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010708590 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

00000000107085A8 00000000ff706918 ASP.global_asax

00000000107085B0 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

00000000107085D8 00000003ff891b60 ASP.wordviewerframe_aspx

00000000107085E0 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

00000000107085E8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

00000000107087C0 00000003ff892990 System.Threading.WaitCallback

00000000107087D8 00000000ff70a330 System.AsyncCallback

00000000107087E0 00000000ff9a80d8 System.Web.HttpContext

0000000010708810 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010708818 00000000ff7078e8 System.Web.PipelineModuleStepContainer

0000000010708AD0 00000003ff8be738 System.Web.HttpUnhandledException

0000000010708EA0 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

0000000010708EB8 00000000ff706918 ASP.global_asax

0000000010708EC0 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

0000000010708EE8 00000003ff891b60 ASP.wordviewerframe_aspx

0000000010708EF0 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010708EF8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

00000000107093D8 00000003ff8be738 System.Web.HttpUnhandledException

00000000107094F0 00000003ff8be738 System.Web.HttpUnhandledException

00000000107097E0 00000003ff892990 System.Threading.WaitCallback

00000000107097F8 00000000ff70a330 System.AsyncCallback

0000000010709830 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

0000000010709838 00000000ff7078e8 System.Web.PipelineModuleStepContainer

00000000107099B0 00000003ff8be738 System.Web.HttpUnhandledException

0000000010709AB0 00000003ff8be738 System.Web.HttpUnhandledException

0000000010709B00 00000003ff892990 System.Threading.WaitCallback

0000000010709B18 00000003ff8be738 System.Web.HttpUnhandledException

0000000010709B80 00000003ff8be738 System.Web.HttpUnhandledException

0000000010709C60 00000003ff8be738 System.Web.HttpUnhandledException

000000001070A1A8 00000000ff70a330 System.AsyncCallback

000000001070A1E0 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070A1E8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070A4B0 00000003ff892990 System.Threading.WaitCallback

000000001070A4C8 00000000ff70a330 System.AsyncCallback

000000001070A500 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070A508 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070A6E0 00000003ff892990 System.Threading.WaitCallback

000000001070A6F8 00000000ff70a330 System.AsyncCallback

000000001070A730 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070A738 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070A9F0 00000003ff8be738 System.Web.HttpUnhandledException

000000001070ADC0 00000003ff892990 System.Threading.WaitCallback

000000001070ADD8 00000000ff70a330 System.AsyncCallback

000000001070AE10 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070AE18 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070B2F8 00000003ff8be328 System.ArgumentException

000000001070B410 00000003ff8be328 System.ArgumentException

000000001070B8B8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070B8D0 00000003ff8be328 System.ArgumentException

000000001070B9D0 00000003ff8be738 System.Web.HttpUnhandledException

000000001070BA38 00000003ff8be738 System.Web.HttpUnhandledException

000000001070BA98 00000003ff8be328 System.ArgumentException

000000001070BAD0 00000003ff8be738 System.Web.HttpUnhandledException

000000001070BBB0 00000003ff8be328 System.ArgumentException

000000001070BBB8 00000003ff8be738 System.Web.HttpUnhandledException

000000001070BBD0 00000003ff8be328 System.ArgumentException

000000001070BC40 00000003ff8be738 System.Web.HttpUnhandledException

000000001070BC50 00000003ff8be328 System.ArgumentException

000000001070BCA8 00000003ff8be328 System.ArgumentException

000000001070BCD0 00000000ff9a80d8 System.Web.HttpContext

000000001070BD08 00000003ff8be328 System.ArgumentException

000000001070BD40 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070BD48 00000003ff8be328 System.ArgumentException

000000001070BD78 00000003ff8be328 System.ArgumentException

000000001070C180 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070C188 00000003ff81bc38 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Resources.ResourceLocator, mscorlib]]

000000001070C190 00000003ff81bbd8 System.Resources.RuntimeResourceSet

000000001070C228 00000000ff70a330 System.AsyncCallback

000000001070C260 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070C268 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070C348 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070C360 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070C370 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070C378 00000003ff81bbd8 System.Resources.RuntimeResourceSet

000000001070C440 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070C448 00000003ff8be270 System.Environment+ResourceHelper+GetResourceStringUserData

000000001070C450 00000003ff81a058 System.Environment+ResourceHelper

000000001070C470 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070C480 00000003ff81b8f8 System.Resources.ResourceManager

000000001070C548 00000000ff70a330 System.AsyncCallback

000000001070C580 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070C588 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070C650 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070C760 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070C778 00000001ff6e1420 System.String   

000000001070C780 00000000ff9a80d8 System.Web.HttpContext

000000001070C7B8 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070C880 00000003ff81b8f8 System.Resources.ResourceManager

000000001070CE58 00000000ff70a330 System.AsyncCallback

000000001070CE90 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070CE98 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070CF60 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070CF68 00000003ff81bc38 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.Resources.ResourceLocator, mscorlib]]

000000001070CF70 00000003ff81bbd8 System.Resources.RuntimeResourceSet

000000001070D0E8 00000003ff81bc88 System.Resources.ResourceReader

000000001070D128 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070D140 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070D150 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070D158 00000003ff81bbd8 System.Resources.RuntimeResourceSet

000000001070D160 00000003ff81b8f8 System.Resources.ResourceManager

000000001070D168 00000002ff6e1250 System.String    mscorlib

000000001070D170 00000001ff6e3aa0 System.Globalization.CultureInfo

000000001070D178 00000001ff6e69e8 System.Reflection.RuntimeAssembly

000000001070D190 00000003ff81bbd8 System.Resources.RuntimeResourceSet

000000001070D198 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070D1A8 00000001ff6e69e8 System.Reflection.RuntimeAssembly

000000001070D1C0 00000003ff81b8f8 System.Resources.ResourceManager

000000001070D1C8 00000001ff6e2338 System.Globalization.CultureInfo

000000001070D220 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070D228 00000003ff8be270 System.Environment+ResourceHelper+GetResourceStringUserData

000000001070D230 00000003ff81a058 System.Environment+ResourceHelper

000000001070D250 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070D260 00000003ff81b8f8 System.Resources.ResourceManager

000000001070D378 00000002ff6eba60 System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib]]

000000001070D490 00000002ff6eba60 System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib]]

000000001070D6B0 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070D700 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070D740 00000002ff6f9dd0 System.String    Microsoft.SharePoint.Diagnostics.CorrelationContext

000000001070D7A0 00000003ff819080 System.String    somedomain.net

000000001070D7E0 00000002ff6f9dd0 System.String    Microsoft.SharePoint.Diagnostics.CorrelationContext

000000001070D838 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070D950 00000002ff6eba60 System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib]]

000000001070D9E8 00000002ff6fa090 Microsoft.Internal.Diagnostics.ULSCat

000000001070DA50 00000003ff8be328 System.ArgumentException

000000001070DAB8 00000003ff8be328 System.ArgumentException

000000001070DB08 00000003ff819080 System.String    somedomain.net

000000001070DB10 00000003ff8be328 System.ArgumentException

000000001070DB50 00000003ff8be328 System.ArgumentException

000000001070DB78 00000003ff819108 System.String    Argument_AddingDuplicate

000000001070DC28 00000003ff8be328 System.ArgumentException

000000001070DC38 00000003ff8be328 System.ArgumentException

000000001070DC48 00000003ff819080 System.String    somedomain.net

000000001070DC50 00000002ff6eba60 System.Collections.Generic.GenericEqualityComparer`1[[System.String, mscorlib]]

000000001070DCC0 00000003ff81c0f8 System.String    An item with the same key has already been added.

000000001070DCD0 00000003ff8be198 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]]

000000001070DCE0 00000003ff8be198 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]]

000000001070DCE8 00000003ff8be140 System.Collections.Generic.List`1[[System.String, mscorlib]]

000000001070DCF0 00000003ff8be198 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]]

000000001070DD00 00000002ff7022a0 System.String    WACSERVER

000000001070DD08 00000003ff819010 System.String    somedomain.net

000000001070DD30 00000002ff6fadb0 Microsoft.Office.Web.Apps.Environment.WacServer.WSConfigAdapter

000000001070DD40 00000003ff8be140 System.Collections.Generic.List`1[[System.String, mscorlib]]

000000001070DD50 00000003ff8be198 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]]

000000001070DD70 00000002ff6fadb0 Microsoft.Office.Web.Apps.Environment.WacServer.WSConfigAdapter

000000001070DD88 00000003ff8be140 System.Collections.Generic.List`1[[System.String, mscorlib]]

000000001070DDB0 00000003ff8be140 System.Collections.Generic.List`1[[System.String, mscorlib]]

000000001070DDB8 00000003ff819080 System.String    somedomain.net

000000001070DDC8 00000003ff8be198 System.Collections.Generic.Dictionary`2[[System.String, mscorlib],[System.String, mscorlib]]

000000001070DDE8 00000003ff8b99a0 System.String    http%3A%2F%2Fthegreen%2Esomedomain%2Enet%2F%5Fvti%5Fbin%2Fwopi%2Eashx%2Ffiles%2F530ba45428634191a8b8c1d2234d3bbc

000000001070DDF0 00000003ff8bcf60 Microsoft.Office.Web.Apps.Common.WopiDocument

000000001070DDF8 00000003ff6e4f10 System.Text.UTF8Encoding

000000001070DE30 00000003ff8bd170 System.Char[]

000000001070DE38 00000003ff8bd138 System.Web.Util.HttpEncoder+UrlDecoder

000000001070DEB8 00000003ff8b99a0 System.String    http%3A%2F%2Fthegreen%2Esomedomain%2Enet%2F%5Fvti%5Fbin%2Fwopi%2Eashx%2Ffiles%2F530ba45428634191a8b8c1d2234d3bbc

000000001070DEC0 00000003ff8bcf60 Microsoft.Office.Web.Apps.Common.WopiDocument

000000001070DEC8 00000003ff6e4f10 System.Text.UTF8Encoding

000000001070DED0 00000003ff8bc410 System.String    eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImtibHVXNmlFamlxTEVRdldEdXliME1DRkhkTSJ9.eyJhdWQiOiJ3b3BpL3RoZWdyZWVuLmludGVjbS5nb3ZAYjdhYjdlNDgtOGM1ZC00NDU2LTlmNzYtNzBiOGYzMjVjZWY3IiwiaXNzIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwQGI3YWI3ZTQ4LThjNWQtNDQ1Ni05Zjc2LTcwYjhmMzI1Y2VmNyIsIm5iZiI6IjEzOTQ4MDY3NDciLCJleHAiOiIxMzk0ODQyNzQ3IiwibmFtZWlkIjoiMCMud3x0cmVhc3VyeVxccGhpZmVybiIsIm5paSI6Im1pY3Jvc29mdC5zaGFyZXBvaW50IiwiaXN1c2VyIjoidHJ1ZSIsImNhY2hla2V5IjoiMCkud3xzLTEtNS0yMS0zMzc2MDg1OTYtMjk3Nzk4MzM5LTEwNTA4ODc5NzQtODQ0NzEiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImFwcGN0eCI6IjUzMGJhNDU0Mjg2MzQxOTFhOGI4YzFkMjIzNGQzYmJjO3RxdlZ4bEVkZ0FUOVMxZWdadFpKOUlGWHNNaz07Q3VzdG9tOzs3RkZGRkZGRkZGRkZGRkZGO1RydWUifQ.HL23QBOF6UtZWzBwY4VTJtlNvrvUX_PSQOCws3oYbBZ4iHDySTurDE9ETbUeeeLYAMXVQ0-e4pQjxQnFa_ERwfuaCE8A-Ocp242Tebv1F2h8xqAsTRDYXGIE8jj_nb8gnKG5_JGFJ8V1nZxWEPDAnibEpSGBH26gKKI8TXClsQeGy_n04ahHzUTB-nuT4KNsVkr8gx4aE8vp4VCQOKDJXBlW32LxPIVX1C6VWiv2iprGE4VZqK2CAgy0waHJzOJrtcM4gP4la_vdQ6_5VVn10BDWtJo6LmF0skC_KvJElmiRriREJCmUcbJ8Vr0u1b5kQZdcb5bAu9-VkjVD4lL5Hg

000000001070DEE0 00000003ff8bcf60 Microsoft.Office.Web.Apps.Common.WopiDocument

000000001070DEE8 00000003ff8bcec0 System.Uri

000000001070DEF0 00000003ff8bcdf8 System.String    http://somesite.somedomain.net/_vti_bin/wopi.ashx/files/530ba45428634191a8b8c1d2234d3bbc

000000001070DF08 00000003ff8b99a0 System.String    http%3A%2F%2Fsomesite%2Esomedomain%2Enet%2F%5Fvti%5Fbin%2Fwopi%2Eashx%2Ffiles%2F530ba45428634191a8b8c1d2234d3bbc

000000001070DF10 00000003ff8bc410 System.String    eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImtibHVXNmlFamlxTEVRdldEdXliME1DRkhkTSJ9.eyJhdWQiOiJ3b3BpL3RoZWdyZWVuLmludGVjbS5nb3ZAYjdhYjdlNDgtOGM1ZC00NDU2LTlmNzYtNzBiOGYzMjVjZWY3IiwiaXNzIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwQGI3YWI3ZTQ4LThjNWQtNDQ1Ni05Zjc2LTcwYjhmMzI1Y2VmNyIsIm5iZiI6IjEzOTQ4MDY3NDciLCJleHAiOiIxMzk0ODQyNzQ3IiwibmFtZWlkIjoiMCMud3x0cmVhc3VyeVxccGhpZmVybiIsIm5paSI6Im1pY3Jvc29mdC5zaGFyZXBvaW50IiwiaXN1c2VyIjoidHJ1ZSIsImNhY2hla2V5IjoiMCkud3xzLTEtNS0yMS0zMzc2MDg1OTYtMjk3Nzk4MzM5LTEwNTA4ODc5NzQtODQ0NzEiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImFwcGN0eCI6IjUzMGJhNDU0Mjg2MzQxOTFhOGI4YzFkMjIzNGQzYmJjO3RxdlZ4bEVkZ0FUOVMxZWdadFpKOUlGWHNNaz07Q3VzdG9tOzs3RkZGRkZGRkZGRkZGRkZGO1RydWUifQ.HL23QBOF6UtZWzBwY4VTJtlNvrvUX_PSQOCws3oYbBZ4iHDySTurDE9ETbUeeeLYAMXVQ0-e4pQjxQnFa_ERwfuaCE8A-Ocp242Tebv1F2h8xqAsTRDYXGIE8jj_nb8gnKG5_JGFJ8V1nZxWEPDAnibEpSGBH26gKKI8TXClsQeGy_n04ahHzUTB-nuT4KNsVkr8gx4aE8vp4VCQOKDJXBlW32LxPIVX1C6VWiv2iprGE4VZqK2CAgy0waHJzOJrtcM4gP4la_vdQ6_5VVn10BDWtJo6LmF0skC_KvJElmiRriREJCmUcbJ8Vr0u1b5kQZdcb5bAu9-VkjVD4lL5Hg

000000001070DF20 00000003ff8bcf60 Microsoft.Office.Web.Apps.Common.WopiDocument

000000001070DF30 00000002ff6eb0c8 System.Globalization.CultureInfo

000000001070DF90 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070DFA8 00000000ff9a80d8 System.Web.HttpContext

000000001070DFB0 00000001ff6e1420 System.String   

000000001070DFC0 00000003ff8b6b08 System.String    ui=en%2DUS&rs=en%2DUS&WOPISrc=http%3A%2F%2Fsomesite%2Esomedomain%2Enet%2F%5Fvti%5Fbin%2Fwopi%2Eashx%2Ffiles%2F530ba45428634191a8b8c1d2234d3bbc&access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImtibHVXNmlFamlxTEVRdldEdXliME1DRkhkTSJ9%2EeyJhdWQiOiJ3b3BpL3RoZWdyZWVuLmludGVjbS5nb3ZAYjdhYjdlNDgtOGM1ZC00NDU2LTlmNzYtNzBiOGYzMjVjZWY3IiwiaXNzIjoiMDAwMDAwMDMtMDAwMC0wZmYxLWNlMDAtMDAwMDAwMDAwMDAwQGI3YWI3ZTQ4LThjNWQtNDQ1Ni05Zjc2LTcwYjhmMzI1Y2VmNyIsIm5iZiI6IjEzOTQ4MDY3NDciLCJleHAiOiIxMzk0ODQyNzQ3IiwibmFtZWlkIjoiMCMud3x0cmVhc3VyeVxccGhpZmVybiIsIm5paSI6Im1pY3Jvc29mdC5zaGFyZXBvaW50IiwiaXN1c2VyIjoidHJ1ZSIsImNhY2hla2V5IjoiMCkud3xzLTEtNS0yMS0zMzc2MDg1OTYtMjk3Nzk4MzM5LTEwNTA4ODc5NzQtODQ0NzEiLCJpc2xvb3BiYWNrIjoiVHJ1ZSIsImFwcGN0eCI6IjUzMGJhNDU0Mjg2MzQxOTFhOGI4YzFkMjIzNGQzYmJjO3RxdlZ4bEVkZ0FUOVMxZWdadFpKOUlGWHNNaz07Q3VzdG9tOzs3RkZGRkZGRkZGRkZGRkZGO1RydWUifQ%2EHL23QBOF6UtZWzBwY4VTJtlNvrvUX%5FPSQOCws3oYbBZ4iHDySTurDE9ETbUeeeLYAMXVQ0%2De4pQjxQnFa%5FERwfuaCE8A%2DOcp242Tebv1F2h8xqAsTRDYXGIE8jj%5Fnb8gnKG5%5FJGFJ8V1nZxWEPDAnibEpSGBH26gKKI8TXClsQeGy%5Fn04ahHzUTB%2DnuT4KNsVkr8gx4aE8vp4VCQOKDJXBlW32LxPIVX1C6VWiv2iprGE4VZqK2CAgy0waHJzOJrtcM4gP4la%5FvdQ6%5F5VVn10BDWtJo6LmF0skC%5FKvJElmiRriREJCmUcbJ8Vr0u1b5kQZdcb5bAu9%2DVkjVD4lL5Hg&access_token_ttl=1394842747481

000000001070DFE0 00000000ff7078e8 System.Web.PipelineModuleStepContainer

000000001070DFF8 00000000ff9a80d8 System.Web.HttpContext

000000001070E000 00000001ff6e1420 System.String   

000000001070E008 00000000ff9a80d8 System.Web.HttpContext

000000001070E010 00000002ff74fbf8 Microsoft.Office.Web.Apps.Environment.WacServer.WSMainStorage

000000001070E020 00000003ff893638 System.Web.UI.HtmlControls.HtmlGenericControl

000000001070E030 00000000ff70fbb8 System.Lazy`1[[Microsoft.Office.Web.Common.EnvironmentAdapters.IMainStorage, Microsoft.Office.Web.Common]]

000000001070E038 00000003ff892ec8 Microsoft.Office.Web.WordViewer.Controls.WordViewerStaticResourcesLoader

000000001070E040 00000003ff892ec8 Microsoft.Office.Web.WordViewer.Controls.WordViewerStaticResourcesLoader

000000001070E048 00000003ff892ec8 Microsoft.Office.Web.WordViewer.Controls.WordViewerStaticResourcesLoader

000000001070E050 00000002ff74fbf8 Microsoft.Office.Web.Apps.Environment.WacServer.WSMainStorage

000000001070E060 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E068 00000003ff8931b0 System.Web.UI.HtmlControls.HtmlForm

000000001070E070 00000003ff8931b0 System.Web.UI.HtmlControls.HtmlForm

000000001070E078 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E0B8 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E0C0 00000001ff6e1420 System.String   

000000001070E0C8 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E0E0 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E0F0 00000000ff9a8298 System.Web.HttpRequest

000000001070E108 00000000ff9a80d8 System.Web.HttpContext

000000001070E110 00000001ff6e1420 System.String   

000000001070E120 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E130 00000000ff9a8298 System.Web.HttpRequest

000000001070E140 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E178 00000003ff8be328 System.ArgumentException

000000001070E190 00000000ff9a80d8 System.Web.HttpContext

000000001070E1A0 00000003ff7f3510 System.Object[]    (System.String[])

000000001070E1B0 00000003ff7f3510 System.Object[]    (System.String[])

000000001070E1B8 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070E1D0 00000000ff70a330 System.AsyncCallback

000000001070E1F0 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E248 00000003ff892990 System.Threading.WaitCallback

000000001070E260 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E288 00000000ff9a80d8 System.Web.HttpContext

000000001070E2A0 00000000ff9a80d8 System.Web.HttpContext

000000001070E2A8 00000003ff892990 System.Threading.WaitCallback

000000001070E2C0 00000000ff9a80d8 System.Web.HttpContext

000000001070E2C8 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E2D0 00000003ff892840 System.Web.UI.Page+<>c__DisplayClass26

000000001070E2F8 00000003ff8be738 System.Web.HttpUnhandledException

000000001070E300 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E308 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

000000001070E310 00000000ff706918 ASP.global_asax

000000001070E318 00000003ff8927e0 System.Func`4[[System.Web.HttpContext, System.Web],[System.AsyncCallback, mscorlib],[System.Object, mscorlib],[System.IAsyncResult, mscorlib]]

000000001070E330 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E340 00000000ff706918 ASP.global_asax

000000001070E378 00000003ff8927a0 System.Web.HttpAsyncResult

000000001070E380 00000000ff70a1f0 System.Web.HttpApplication+AsyncEventExecutionStep

000000001070E3A8 00000000ff9a80d8 System.Web.HttpContext

000000001070E3C0 00000003ff891b60 ASP.wordviewerframe_aspx

000000001070E3C8 00000000ff9a80d8 System.Web.HttpContext

000000001070E3F0 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070E3F8 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070E410 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070E498 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070E4B0 00000000ff706918 ASP.global_asax

000000001070E4B8 00000000ff70a2f0 System.Web.HttpApplication+CallHandlerExecutionStep

000000001070E520 00000000ff9ad998 System.Web.ThreadContext

000000001070E528 00000000ff9ad930 System.Web.LegacyAspNetSynchronizationContext

000000001070E530 00000000ff9a80d8 System.Web.HttpContext

000000001070E568 00000000ff706918 ASP.global_asax

000000001070E570 00000000ff9a80d8 System.Web.HttpContext

000000001070E578 00000003ff892760 System.Web.HttpAsyncResult

000000001070E580 00000003ff6e6478 System.AsyncCallback

000000001070E590 00000000ff709f80 System.Web.HttpApplication+PipelineStepManager

000000001070E5C0 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070E5D0 00000003ff6e5e30 System.Web.HttpRuntime

000000001070E658 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070E668 00000000ff9a80d8 System.Web.HttpContext

000000001070E680 00000003ff6e5e30 System.Web.HttpRuntime

000000001070E688 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070E690 00000000ff9a80d8 System.Web.HttpContext

000000001070E788 00000000ff9a80d8 System.Web.HttpContext

000000001070E790 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070E7B8 00000000ff9a8768 System.Web.RootedObjects

000000001070EB28 00000003ff890488 System.Object[]    (System.String[])

000000001070EC80 00000001ff6fcf08 System.String    Set-Cookie

000000001070EC90 00000003ff890758 System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry

000000001070ECB8 00000000ff9ad5f0 System.Collections.Hashtable

000000001070ECC8 00000001ff6fcf08 System.String    Set-Cookie

000000001070ECE0 00000003ff890758 System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry

000000001070ECF0 00000001ff6fcf08 System.String    Set-Cookie

000000001070ED10 00000000ff9ad640 System.Collections.Hashtable+bucket[]

000000001070ED18 00000000ff9ad5f0 System.Collections.Hashtable

000000001070ED20 00000001ff6fcf08 System.String    Set-Cookie

000000001070ED48 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070ED50 00000001ff6fcf08 System.String    Set-Cookie

000000001070ED58 00000000ff9ad5f0 System.Collections.Hashtable

000000001070ED68 00000000ff9ad5f0 System.Collections.Hashtable

000000001070ED70 00000000ff9ad3c8 System.Web.HttpHeaderCollection

000000001070EDD0 00000000ff9ad3c8 System.Web.HttpHeaderCollection

000000001070EDE0 00000003ff890620 System.Web.HttpResponseHeader

000000001070EDE8 00000000ff9ad3c8 System.Web.HttpHeaderCollection

000000001070EDF8 00000001ff6fcf08 System.String    Set-Cookie

000000001070EE00 00000003ff890758 System.Collections.Specialized.NameObjectCollectionBase+NameObjectEntry

000000001070EE08 00000001ff6fcf08 System.String    Set-Cookie

000000001070EE10 00000000ff9ad3c8 System.Web.HttpHeaderCollection

000000001070EE30 00000003ff890558 System.Text.StringBuilder

000000001070EE38 00000000ff9ad3c8 System.Web.HttpHeaderCollection

000000001070EE48 00000000ff9ad3c8 System.Web.HttpHeaderCollection

000000001070EE50 00000001ff6fcf08 System.String    Set-Cookie

000000001070EE58 00000003ff8905c0 System.String    DcLcid=ui=1033&data=1033; path=/

000000001070EF00 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070EF08 00000000ff9a80d8 System.Web.HttpContext

000000001070EFA0 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070F0E8 00000000ff9a80d8 System.Web.HttpContext

000000001070F100 00000003ff6e5e30 System.Web.HttpRuntime

000000001070F108 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070F110 00000000ff9a80d8 System.Web.HttpContext

000000001070F180 00000000ff9a80d8 System.Web.HttpContext

000000001070F1C0 00000000ff9ad998 System.Web.ThreadContext

000000001070F208 00000000ff9a80d8 System.Web.HttpContext

000000001070F210 00000000ff9a7ac8 System.Web.Hosting.IIS7WorkerRequest

000000001070F238 00000000ff9a8768 System.Web.RootedObjects

 

 

 

 

0:036> kb500

RetAddr           : Args to Child                                                           : Call Site

000007fe`f8feee57 : 00000000`10705cb8 00000000`10705bf8 00000003`ff8be738 000007fe`00000001 : KERNELBASE!RaiseException+0x39 [d:\win7sp1_gdr\minkernel\kernelbase\xcpt.c @ 815]

000007fe`f8fefbdb : 00000000`0000027f 00000000`00000000 00000000`00000000 0000ffff`00001fa0 : clr!RaiseTheExceptionInternalOnly+0x28b [f:\dd\ndp\clr\src\vm\excep.cpp @ 3083]

000007fe`e3970a0f : 00000000`10706348 00007123`a3fcd2f4 000007fe`e2ae2190 000007fe`f8fed47d : clr!IL_Rethrow+0x98 [f:\dd\ndp\clr\src\vm\jithelpers.cpp @ 5301]

000007fe`f8fee375 : 00000000`0ed4acd0 000007fe`e2ae2190 00000000`0233f098 00000000`0ed4acd0 : System_Web_ni!System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+0xbfa98f

000007fe`f8feeb64 : 00000000`0233f098 000007fe`e39709d5 00000000`1070e330 00000000`0233f130 : clr!ExceptionTracker::CallHandler+0xc5 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 3358]

000007fe`f8feea0f : 00000000`1070e330 00000000`107061c0 00000000`107079d0 00000000`00000002 : clr!ExceptionTracker::CallCatchHandler+0x7c [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 536]

00000000`77519dad : 000007fe`e34c4400 00000000`1070e330 00000000`00000000 00000000`107061c0 : clr!ProcessCLRException+0x2e2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1073]

00000000`77508a4c : 00000000`10710000 00000000`107062b0 00000202`0006735c 00000000`1070e2c0 : ntdll!zzz_AsmCodeRange_End [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 249]

000007fe`f8feeae0 : 00000000`1070e330 00000000`0000bad0 00000000`107079d0 00000000`0ed4acd0 : ntdll!RtlUnwindEx+0x539 [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 896]

000007fe`f8feea92 : 00000000`00000000 00000000`10706e90 00000000`0ed4af30 00000000`00000000 : clr!ClrUnwindEx+0x40 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 4359]

00000000`77519d2d : 00000000`107079d0 00000000`1070e330 00000000`10710000 00000000`10706e90 : clr!ProcessCLRException+0x2b2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1038]

00000000`775091cf : 00000000`10710000 000007fe`e2e49ea8 00000000`0006735c 00000000`1070e2c0 : ntdll!RtlpExecuteHandlerForException+0xd [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 131]

00000000`77541248 : 00000000`107079d0 00000000`107074e0 00000000`00000001 00000000`00000000 : ntdll!RtlDispatchException+0x45a [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 436]

000007fe`fda8940d : 00000000`10707bf8 00000000`00000001 00000000`00000005 00000000`00000000 : ntdll!KiUserExceptionDispatch+0x2e [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\trampoln.asm @ 570]

000007fe`f8feee57 : 00000000`10707bf8 00000000`10707b38 00000003`ff8be738 00000000`10708ec0 : KERNELBASE!RaiseException+0x39 [d:\win7sp1_gdr\minkernel\kernelbase\xcpt.c @ 815]

000007fe`f8fefbdb : ffffffff`fffffffe 00000000`00000000 00000000`00000000 000007fe`f8fed6e0 : clr!RaiseTheExceptionInternalOnly+0x28b [f:\dd\ndp\clr\src\vm\excep.cpp @ 3083]

000007fe`e39add84 : 000007fe`e2aef328 000007fe`f8fed47d 000007fe`e2aef328 00000000`00000254 : clr!IL_Rethrow+0x98 [f:\dd\ndp\clr\src\vm\jithelpers.cpp @ 5301]

000007fe`f8fee375 : 00000000`0ed4acd0 000007fe`e2aef328 00000000`0233ef20 00000000`0ed4acd0 : System_Web_ni!System.Web.UI.Page.LegacyAsyncPageBeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)+0x4e9a24

000007fe`f8feeb64 : 00000000`0233ef20 000007fe`e39add40 00000000`1070e2c0 00000000`0233efb8 : clr!ExceptionTracker::CallHandler+0xc5 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 3358]

000007fe`f8feea0f : 00000000`1070e2c0 00000000`107080f0 00000000`10709900 00000000`00000002 : clr!ExceptionTracker::CallCatchHandler+0x7c [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 536]

00000000`77519dad : 000007fe`e2d6db00 00000000`1070e2c0 00000000`00000000 00000000`107080f0 : clr!ProcessCLRException+0x2e2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1073]

00000000`77508a4c : 00000000`10710000 00000000`10708730 00000202`0006735c 00000000`1070e1f0 : ntdll!zzz_AsmCodeRange_End [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 249]

000007fe`f8feeae0 : 00000000`1070e2c0 00000000`0000bad0 00000000`10709900 00000000`0ed4acd0 : ntdll!RtlUnwindEx+0x539 [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 896]

000007fe`f8feea92 : 00000000`00000000 00000000`10708dc0 00000000`0ed4af30 00000000`00000000 : clr!ClrUnwindEx+0x40 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 4359]

00000000`77519d2d : 00000000`10709900 00000000`1070e2c0 00000000`10710000 00000000`10708dc0 : clr!ProcessCLRException+0x2b2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1038]

00000000`775091cf : 00000000`10710000 000007fe`e2e47e38 000017a4`0006735c 00000000`1070e1f0 : ntdll!RtlpExecuteHandlerForException+0xd [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 131]

00000000`77541248 : 00000000`10709900 00000000`10709410 00000000`00000001 00000000`00000000 : ntdll!RtlDispatchException+0x45a [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 436]

000007fe`fda8940d : 00000000`10709b28 00000000`00000001 00000000`00000005 00000000`00000000 : ntdll!KiUserExceptionDispatch+0x2e [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\trampoln.asm @ 570]

000007fe`f8feee57 : 00000000`10709b28 00000000`10709a68 00000003`ff8be738 00000000`00000001 : KERNELBASE!RaiseException+0x39 [d:\win7sp1_gdr\minkernel\kernelbase\xcpt.c @ 815]

000007fe`f8fefbdb : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : clr!RaiseTheExceptionInternalOnly+0x28b [f:\dd\ndp\clr\src\vm\excep.cpp @ 3083]

000007fe`e396d795 : 000007fe`e2aef0e8 00000000`000002b7 00000000`0233f130 00000000`1070a1d0 : clr!IL_Rethrow+0x98 [f:\dd\ndp\clr\src\vm\jithelpers.cpp @ 5301]

000007fe`f8fee375 : 00000000`0ed4acd0 000007fe`e2aef0e8 00000000`0233f098 00000000`0ed4acd0 : System_Web_ni!System.Web.UI.Page.ProcessRequest(Boolean, Boolean)+0xbffc65

000007fe`f8feeb64 : 00000000`0233f098 000007fe`e396d77d 00000000`1070e1f0 00000000`0233f130 : clr!ExceptionTracker::CallHandler+0xc5 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 3358]

000007fe`f8feea0f : 00000000`1070e1f0 00000000`1070a010 00000000`1070b820 00000000`00000002 : clr!ExceptionTracker::CallCatchHandler+0x7c [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 536]

00000000`77519dad : 000007fe`e2d6ed00 00000000`1070e1f0 00000000`00000000 00000000`1070a010 : clr!ProcessCLRException+0x2e2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1073]

00000000`77508a4c : 00000000`10710000 00000000`1070a100 00000202`0006735c 00000000`1070e130 : ntdll!zzz_AsmCodeRange_End [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 249]

000007fe`f8feeae0 : 00000000`1070e1f0 00000000`0000bad0 00000000`1070b820 00000000`0ed4acd0 : ntdll!RtlUnwindEx+0x539 [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 896]

000007fe`f8feea92 : 00000000`00000000 00000000`1070ace0 00000000`0ed4af30 00000000`00000000 : clr!ClrUnwindEx+0x40 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 4359]

00000000`77519d2d : 00000000`1070b820 00000000`1070e1f0 00000000`10710000 00000000`1070ace0 : clr!ProcessCLRException+0x2b2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1038]

00000000`775091cf : 00000000`10710000 000007fe`e2e3e7a8 00000000`0006735c 00000000`1070e130 : ntdll!RtlpExecuteHandlerForException+0xd [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 131]

00000000`77541248 : 00000000`1070b820 00000000`1070b330 00000202`00000001 00000000`00000000 : ntdll!RtlDispatchException+0x45a [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 436]

000007fe`fda8940d : 00000000`1070ba48 00000000`00000001 00000000`00000005 00000000`00000000 : ntdll!KiUserExceptionDispatch+0x2e [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\trampoln.asm @ 570]

000007fe`f8feee57 : 00000000`1070ba48 00000000`1070b988 00000003`ff8be738 00000000`00000000 : KERNELBASE!RaiseException+0x39 [d:\win7sp1_gdr\minkernel\kernelbase\xcpt.c @ 815]

000007fe`f8fef16e : 00000000`002d0000 000007fe`00000002 00000000`000003c0 00000000`000003d0 : clr!RaiseTheExceptionInternalOnly+0x28b [f:\dd\ndp\clr\src\vm\excep.cpp @ 3083]

000007fe`e396cda7 : 00000003`ff8be328 00000000`e0434352 00000000`1070dbe8 000007fe`e2d20ff0 : clr!IL_Throw+0xe3 [f:\dd\ndp\clr\src\vm\jithelpers.cpp @ 5227]

000007fe`e396db53 : 00000003`ff891b60 00000003`ff8be328 000007fe`e2aef188 000007fe`f8fed47d : System_Web_ni!System.Web.UI.Page.HandleError(System.Exception)+0xc00647

000007fe`f8fee375 : 00000000`0ed4acd0 000007fe`e2aef188 00000000`0233ef20 00000000`0ed4acd0 : System_Web_ni!System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)+0xbffe43

000007fe`f8feeb64 : 00000000`0233ef20 000007fe`e396db12 00000000`1070e130 00000000`0233efb8 : clr!ExceptionTracker::CallHandler+0xc5 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 3358]

000007fe`f8feea0f : 00000000`1070e130 00000000`1070c090 00000000`1070d8a0 00000000`00000002 : clr!ExceptionTracker::CallCatchHandler+0x7c [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 536]

00000000`77519dad : 000007fe`99bf9f00 00000000`1070e130 00000000`00000000 00000000`1070c090 : clr!ProcessCLRException+0x2e2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1073]

00000000`77508a4c : 00000000`10710000 00000000`1070c6d0 00000204`0006735c 00000000`00000000 : ntdll!zzz_AsmCodeRange_End [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 249]

000007fe`f8feeae0 : 00000000`1070e130 00000000`0000bad0 00000000`1070d8a0 00000000`0ed4acd0 : ntdll!RtlUnwindEx+0x539 [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 896]

000007fe`f8feea92 : 00000000`00000000 00000000`1070cd60 00000000`00000001 00000000`00000000 : clr!ClrUnwindEx+0x40 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 4359]

00000000`77519d2d : 000007fe`99bf9f2a 00000000`1070e130 00000000`10710000 00000000`1070cd60 : clr!ProcessCLRException+0x2b2 [f:\dd\ndp\clr\src\vm\exceptionhandling.cpp @ 1038]

00000000`775091cf : 00000000`10710000 000007fe`e2e3c684 00000000`0006735c 00000000`02320290 : ntdll!RtlpExecuteHandlerForException+0xd [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\xcptmisc.asm @ 131]

00000000`77541248 : 00000000`1070d8a0 00000000`1070d3b0 00000000`00000001 000007fe`00000000 : ntdll!RtlDispatchException+0x45a [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\exdsptch.c @ 436]

000007fe`fda8940d : 00000000`1070dac8 00000000`00000001 00000000`00000005 00000003`ff81c000 : ntdll!KiUserExceptionDispatch+0x2e [d:\win7sp1_gdr\minkernel\ntos\rtl\amd64\trampoln.asm @ 570]

000007fe`f8feee57 : 00000000`1070dac8 00000000`1070da08 00000003`ff8be328 00000000`1070d980 : KERNELBASE!RaiseException+0x39 [d:\win7sp1_gdr\minkernel\kernelbase\xcpt.c @ 815]

000007fe`f8fef16e : 00000000`0018561f 00000000`00000000 00000000`00000000 00000000`00000000 : clr!RaiseTheExceptionInternalOnly+0x28b [f:\dd\ndp\clr\src\vm\excep.cpp @ 3083]

000007fe`f8a5c70c : 00000003`ff8be198 00000000`00000000 00000003`ff8be198 00000003`ff8be140 : clr!IL_Throw+0xe3 [f:\dd\ndp\clr\src\vm\jithelpers.cpp @ 5227]

000007fe`9982caac : 000007fe`f616dae0 000007fe`f7f03fc0 00000002`ff6fadb0 000007fe`f8f2e193 : mscorlib_ni!System.Collections.Generic.Dictionary`2[[System.__Canon, mscorlib],[System.__Canon, mscorlib]].Insert(System.__Canon, System.__Canon, Boolean)+0xdbc9ec

000007fe`99c61838 : 000007fe`99adf950 000007fe`99caa438 00000000`00000000 00000000`1070de88 : Microsoft_Office_Web_Apps_Environment_WacServer!Microsoft.Office.Web.Apps.Environment.WacServer.WSConfigAdapter.TryGetValue[[System.Boolean, mscorlib]](System.String, Boolean ByRef)+0xc2ac

000007fe`99c613b0 : 00000003`ff8bcf60 00000003`ff8bcec0 00000003`ff8bcdf8 00000000`00000000 : Microsoft_Office_Web_Apps_Common!Microsoft.Office.Web.Apps.Common.WopiDocument.ValidateHostAndSetFileSource()+0x68

000007fe`99c52a03 : 00000002`ff6eb0c8 00000144`c31b4259 00000000`00000000 00000000`00000000 : Microsoft_Office_Web_Apps_Common!Microsoft.Office.Web.Apps.Common.WopiDocument..ctor(System.String, System.String, Int64, System.String, System.String, Microsoft.Office.Web.Apps.Common.WopiType)+0xb0

000007fe`99c61291 : 00000144`c31b4259 00000000`00000000 00000000`ff7078e8 00000004`ff6f1600 : Microsoft_Office_Web_Apps_Common!Microsoft.Office.Web.Apps.Common.WopiDocument.IsValidWopiQueryString(System.String, Microsoft.Office.Web.Common.EnvironmentAdapters.BaseDocumentType, Boolean, Microsoft.Office.Web.Common.EnvironmentAdapters.BaseDocument ByRef)+0x293

000007fe`99c611ef : 00000003`ff893638 000007fe`e2d33c49 00000000`ff70fbb8 00000003`ff892ec8 : Microsoft_Office_Web_Apps_Common!Microsoft.Office.Web.Apps.Common.WopiDocument.CreateFromQuerySignature(System.String)+0x31

000007fe`99bf9f2a : 00000003`ff891b60 00000003`ff8931b0 00000003`ff8931b0 00000003`ff891b60 : Microsoft_Office_Web_Apps_Environment_WacServer!Microsoft.Office.Web.Apps.Environment.WacServer.WSMainStorage.GetBaseDocumentFromContext(System.Web.HttpContext, System.String)+0x2f

000007fe`e2d4bcd1 : 00000003`ff891b60 000007fe`e2d5ca8b 00000000`ff9a8298 000007fe`e353798a : Microsoft_Office_Web_Host_WacServer_WebWordViewer!Microsoft.Office.Web.Host.WacServer.WebWordViewer.WordViewerFrame.OnPreRender(System.EventArgs)+0x10a

000007fe`e2d6edd9 : 00000000`ff9a8298 000007fe`e2d55869 00000003`ff891b60 000007fe`e2d4ca4b : System_Web_ni!System.Web.UI.Control.PreRenderRecursiveInternal()+0x71

000007fe`e2d6dbe9 : 00000003`ff891b60 00000000`00000001 00000000`00000000 00000000`00000000 : System_Web_ni!System.Web.UI.Page.ProcessRequestMain(Boolean, Boolean)+0x10c9

000007fe`e34ad934 : 00000003`ff891b60 000007fe`e365ef32 00000000`ff9a8200 000007fe`f7ca94de : System_Web_ni!System.Web.UI.Page.ProcessRequest(Boolean, Boolean)+0xb9

000007fe`e34c4472 : 00000000`ff9a80d8 00000003`ff891b60 00000003`ff892840 000007fe`e34c85c3 : System_Web_ni!System.Web.HttpContext.InvokeCancellableCallback(System.Threading.WaitCallback, System.Object)+0x64

000007fe`e2d76262 : 00000003`ff891b60 00000000`1070e350 00000000`ff706918 00000000`1070e53a : System_Web_ni!System.Web.UI.Page.LegacyAsyncPageBeginProcessRequest(System.Web.HttpContext, System.AsyncCallback, System.Object)+0x112

000007fe`e2d3b900 : 00000000`ff70a2f0 00000000`1070e490 000007fe`e2ae1c80 000007fe`99855f58 : System_Web_ni!System.Web.HttpApplication+CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()+0x1e2

000007fe`e2d5aa01 : 00000000`ff706918 00000000`ff70a2f0 00000000`1070e53a 00000000`00000000 : System_Web_ni!System.Web.HttpApplication.ExecuteStep(IExecutionStep, Boolean ByRef)+0x120

000007fe`e2d3baa3 : 00000000`ff709f80 000007fe`e2d51c9d 00000000`00000000 00000000`00000000 : System_Web_ni!System.Web.HttpApplication+PipelineStepManager.ResumeSteps(System.Exception)+0x7d1

000007fe`e2d34dae : 000007fe`e2ad3c08 00000000`1070e5a0 00000000`00000000 00000000`1070e5c0 : System_Web_ni!System.Web.HttpApplication.BeginProcessRequestNotification(System.Web.HttpContext, System.AsyncCallback)+0x83

000007fe`e2d3e8d1 : 00000003`ff6e5e30 00000000`ff9a7ac8 00000000`ff9a80d8 00000000`00dccc90 : System_Web_ni!System.Web.HttpRuntime.ProcessRequestNotificationPrivate(System.Web.Hosting.IIS7WorkerRequest, System.Web.HttpContext)+0x28e

000007fe`e2d3e422 : 00000000`00000000 00000000`00dce470 00000000`00dce880 00000000`00dce914 : System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)+0x491

000007fe`e349d2e1 : 00000000`00dcc078 000007fe`f9e7d195 00000000`00000001 000007fe`fa844a1b : System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)+0x22

000007fe`f8f3280e : 00000000`00dce924 000007fe`e0282039 00000000`00000001 00000000`1070e9b0 : System_Web_ni!DomainNeutralILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)+0x51

000007fe`e0281db2 : 00000000`00dce470 00000000`1070e9f0 00000000`00000001 00000000`00000001 : clr!UMThunkStub+0x6e [f:\dd\ndp\clr\src\vm\amd64\UMThunkStub.asm @ 229]

000007fe`e0281d37 : 00000000`00000000 00000000`00000000 00000000`0000043a 00000000`00000000 : webengine4!W3_MGD_HANDLER::ProcessNotification+0x78 [f:\dd\ndp\fx\src\xsp\webengine\mgdhandler.cxx @ 549]

000007fe`e0281c36 : 00000000`00dce470 00000000`00000080 00000000`00dccc90 00000000`00000000 : webengine4!W3_MGD_HANDLER::DoWork+0x43d [f:\dd\ndp\fx\src\xsp\webengine\mgdhandler.cxx @ 494]

000007fe`e0282909 : 00000000`00000001 00000000`00e4d5c8 00000000`01423a58 00000000`00dccc90 : webengine4!RequestDoWork+0x34e [f:\dd\ndp\fx\src\xsp\webengine\mgdeng.cxx @ 542]

000007fe`f9e52de7 : 00000000`1070eb80 00000000`01423b98 00000000`00000000 000007fe`f7e9b0f0 : webengine4!CMgdEngHttpModule::OnExecuteRequestHandler+0x21 [f:\dd\ndp\fx\src\xsp\webengine\mgdmodule.hxx @ 281]

000007fe`f9e546a4 : 00000000`00dccc98 00007123`9b459cee 000007fe`f951a8d0 00000000`1070ec48 : iiscore!NOTIFICATION_CONTEXT::RequestDoWork+0x233 [d:\w7rtm\inetsrv\iis\iisrearc\iis70\core\notificationcontext.cxx @ 1562]

000007fe`f9e5a775 : 00000003`ff8906d8 00000000`00dccc90 00000000`00dccc98 00000000`00000000 : iiscore!NOTIFICATION_CONTEXT::CallModulesInternal+0x174 [d:\w7rtm\inetsrv\iis\iisrearc\iis70\core\notificationcontext.cxx @ 474]

000007fe`f9e55a03 : 00000001`ff6fcf08 00000000`00000017 00000003`ff890758 00000000`00000000 : iiscore!NOTIFICATION_CONTEXT::CallModules+0x25 [d:\w7rtm\inetsrv\iis\iisrearc\iis70\core\notificationcontext.h @ 198]

000007fe`f9e5a81c : 00000000`ff9a7ac8 00000000`00dce470 00000000`1070f010 000007fe`e2d3e3c6 : iiscore!W3_CONTEXT::DoWork+0x34d [d:\w7rtm\inetsrv\iis\iisrearc\iis70\core\w3context.cxx @ 1449]

000007fe`e02828b5 : 00000000`1070f050 00000000`00000004 00000000`00dce470 00000000`00000000 : iiscore!W3_CONTEXT::IndicateCompletion+0x8c [d:\w7rtm\inetsrv\iis\iisrearc\iis70\core\w3context.cxx @ 2615]

(Inline Function) : --------`-------- --------`-------- --------`-------- --------`-------- : webengine4!W3_MGD_HANDLER::IndicateCompletion+0x35 [f:\dd\ndp\fx\src\xsp\webengine\mgdhandler.hxx @ 560]

000007fe`e2dea42b : 000007fe`e2ad3188 000007fe`e2a715a0 00007123`9b459cee 000007fe`f950c4a0 : webengine4!MgdIndicateCompletion+0x60 [f:\dd\ndp\fx\src\xsp\webengine\mgdexports.cxx @ 100]

000007fe`e2d3eaa7 : 00000003`ff6e5e30 00000000`ff9a7ac8 00000000`ff9a80d8 00000000`0ec89090 : System_Web_ni!DomainNeutralILStubClass.IL_STUB_PInvoke(IntPtr, System.Web.RequestNotificationStatus ByRef)+0x7b

000007fe`e2d3e422 : 00000000`00000020 00000000`00dce470 00000000`00000000 00000000`00000018 : System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr, IntPtr, IntPtr, Int32)+0x667

000007fe`e349d2e1 : 00000000`00001000 000007fe`f8e730f8 00000000`00000000 000007fe`f8f3c1b6 : System_Web_ni!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr, IntPtr, IntPtr, Int32)+0x22

000007fe`f8f32a63 : ffffffff`ffffffff 000007fe`00000001 00000000`0ed4acd0 000007fe`f8f3c11f : System_Web_ni!DomainNeutralILStubClass.IL_STUB_ReversePInvoke(Int64, Int64, Int64, Int32)+0x51

000007fe`f8f42598 : 00000000`00000001 00000000`00000001 ffffffff`fffffffe 000007fe`f8f3c669 : clr!UM2MThunk_WrapperHelper+0x43 [f:\dd\ndp\clr\src\vm\amd64\UMThunkStub.asm @ 492]

000007fe`f8fe9c5a : 00000000`1070f528 00000000`023b9700 00000000`0ed4acd0 00000000`00000001 : clr!UM2MThunk_Wrapper+0x54 [f:\dd\ndp\clr\src\vm\dllimportcallback.cpp @ 135]

000007fe`f8f42521 : 00000000`1070f601 ffffffff`00000002 00000000`00000002 000007fe`e02822b0 : clr!Thread::DoADCallBack+0x12e [f:\dd\ndp\clr\src\vm\threads.cpp @ 17296]

000007fe`f8f32a0d : 00000000`023b9700 ffffffff`ffffffff 00000000`00dce470 00000000`1070f710 : clr!UM2MDoADCallBack+0x91 [f:\dd\ndp\clr\src\vm\dllimportcallback.cpp @ 169]

000007fe`e0281db2 : 00000000`00000000 00000000`00dce470 00000000`0000000b 00000000`00000004 : clr!UMThunkStub+0x26d [f:\dd\ndp\clr\src\vm\amd64\UMThunkStub.asm @ 421]

000007fe`e02822f2 : 00000000`00000004 00000000`00dce470 00000000`00000000 00000000`00000000 : webengine4!W3_MGD_HANDLER::ProcessNotification+0x78 [f:\dd\ndp\fx\src\xsp\webengine\mgdhandler.cxx @ 549]

000007fe`f8fe94a6 : 00000000`00dce470 000007fe`f972e348 00000000`00000000 000007fe`e02822b0 : webengine4!ProcessNotificationCallback+0x42 [f:\dd\ndp\fx\src\xsp\webengine\mgdeng.cxx @ 1096]

000007fe`f8fe88cf : 00000000`ffffffff 00000000`1070f801 00000000`1070f800 00000001`2d4103bb : clr!UnManagedPerAppDomainTPCount::DispatchWorkItem+0x11a [f:\dd\ndp\clr\src\vm\threadpoolrequest.cpp @ 542]

000007fe`f8fe87cf : 00000001`00050005 00000000`00000001 00000000`00000001 00000000`00000000 : clr!ThreadpoolMgr::ExecuteWorkRequest+0x4c [f:\dd\ndp\clr\src\vm\win32threadpool.cpp @ 1989]

000007fe`f8f8d702 : 00000000`00000000 00000000`00000001 00000000`00000001 00000000`00000409 : clr!ThreadpoolMgr::WorkerThreadStart+0xf3 [f:\dd\ndp\clr\src\vm\win32threadpool.cpp @ 2462]

00000000`76f2652d : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : clr!Thread::intermediateThreadProc+0x7d [f:\dd\ndp\clr\src\vm\threads.cpp @ 3465]

00000000`7751c541 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : kernel32!BaseThreadInitThunk+0xd [d:\win7sp1_gdr\base\win32\client\thread.c @ 65]

00000000`00000000 : 00000000`00000000 00000000`00000000 00000000`00000000 00000000`00000000 : ntdll!RtlUserThreadStart+0x1d [d:\win7sp1_gdr\minkernel\ntos\rtl\rtlexec.c @ 3203]

 

Don’t Even Bother Trying to Enforce FIPSAlgorithmPolicy on SharePoint 2010 Servers

$
0
0

 

 

Summary

 

Trying to force SharePoint servers to use only FIPS 140-2 compliant algorithms is not an uncommon event. It's admittedly tempting. But invariably it breaks something in SharePoint 2010. It can and will cause one or more big problems for the proper functioning of SharePoint 2010. The most notable one is clients seeing "503 Service Unavailable" when attempting to browse to a SharePoint site. If that happens, the entire SharePoint farm becomes mostly worthless. Also workflows may fail to run on a SharePoint server that is locked down in this way. Furthermore, even workflows that are created on a machine that is locked down in this way may not run on a SharePoint server or in Windows Workflow Foundation. WCF services may break too. Infopath forms services may possibly break as well.

Hundreds of people have already learned the hard way that FIPSAlgorithmPolicy and SharePoint 2010 (and MOSS 2007) don't mix. Hopefully this blog post will help prevent others from having to go through the same pains.

Also worthy of note is that the encryption algorithms that SharePoint uses to communicate with between its servers and clients are FIPS compliant. The few examples documented where SharePoint 2010 does not use FIPS compliant algorithms have nothing to do with external communication—just "internal processing."

 

 

Primary Sources of Documentation

 

http://support.microsoft.com/kb/2000371

Workflows fail to start when the Federal Information Processing Standard (FIPS) algorithm is enabled on a SharePoint server. . . SharePoint Server uses several Windows encryption algorithms that do not comply with Federal Information Processing Standard (FIPS) 140-2 - Security Requirements for Cryptographic Modules. For example, SharePoint Server 2010 uses MD5, which does not comply with FIPS 140-2, for computing hash values that are not used for security purposes.

 

http://technet.microsoft.com/en-us/library/cc263215(v=office.14).aspx

SharePoint Server 2010 uses several Windows encryption algorithms for computing hash values that do not comply with Federal Information Processing Standard (FIPS) 140-2, Security Requirements for Cryptographic Modules. These algorithms are not used for security purposes; they are used for internal processing. For example, SharePoint Server 2010 uses MD5 to create hash values that are used as unique identifiers. Because SharePoint Server 2010 uses these algorithms, it does not support the Windows security policy setting that requires FIPS compliant algorithms for encryption and hashing. . . . The Windows FIPSAlgorithmPolicy registry key is. . . a useful enforcement tool for many solutions, but not [for] SharePoint Server 2010.

 

http://support.microsoft.com/kb/928833

The application may crash, Visual Studio may crash, or you may receive an error message when you develop or run a Windows Workflow Foundation-based application on a computer that has FIPS-compliant algorithms enabled. When you develop or run a Microsoft Windows Workflow Foundation-based application on a computer that has Federal Information Processing Standard (FIPS) compliant algorithms enabled, you may experience. . . symptoms. This issue occurs because Windows Workflow Foundation uses the MD5CryptoServiceProvider class to provide non-secure hashing of a string to a unique key. The MD5CryptoServiceProvider class does not support FIPS compliance.

 

Secondary Sources of Documentation

 

http://blogs.msdn.com/shawnfa/archive/2008/03/14/disabling-the-fips-algorithm-check.aspx

.NET 2.0 introduced a check for FIPS certified algorithms if your local security policy was configured to require them. This resulted in algorithms which are not FIPS compliant (or implementations which were not FIPS certified) throwing an InvalidOperationException from their constructors. In some cases this isn't a desirable behavior. For instance, some applications need to use the MD5 hashing algorithm for compatibility with an older communication protocol or file format. Prior to .NET 3.5, the AES algorithm was only available in an implementation which was not FIPS certified, and if you needed to use that algorithm the FIPS check could also block you. To help these cases, we added a configuration file switch to .NET 2.0 SP 1 (and therefore .NET 3.5) which allows an application to say "I know what I'm doing, please don't enforce FIPS for me".

[Note that SharePoint 2010 uses .net 2.0/3.5.]

 

http://support.microsoft.com/kb/911722

You may receive an error message when you access ASP.NET Web pages that have ViewState enabled after you upgrade from ASP.NET 1.1 to ASP.NET 2.0. . . This problem occurs when the following conditions are true: •The HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\fipsalgorithmpolicy registry subkey is set to 1. •ASP.NET 2.0 uses the RijndaelManaged implementation of the AES algorithm when it processes view state data. The ReindaelManaged implementation has not been certified by the National Institute of Standards and Technology (NIST) as compliant with the Federal Information Processing Standard (FIPS). Therefore, the AES algorithm is not part of the Windows Platform FIPS validated cryptographic algorithms.

[Note that SharePoint 2010 uses asp.net 2.0/3.5. It may not use the RijndaelManaged implementation of the AES algorithm, however.]

 

http://support.microsoft.com/kb/935434

This problem occurs because the MD5 algorithm is not FIPS compliant. The MD5 algorithm uses Windows Communication Foundation to obtain a hash value. The hash value generates a unique name for a data contract.

[Note that SharePoint 2010 uses WCF. Although it may not use this specific WCF call or need this fix.]

 

 

 

Tertiary Sources of Documentation

 

 

 

Disclaimer

 

Standard blog disclaimers apply.

 

Additional Search Key Words

 

HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy\Enabled HKLM\System\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy FIPS compliant algorithms for encryption, hashing, and signing Group ID (Vulid): V-3383 The system is not configured to use FIPS compliant Algorithms for Encryption, Hashing, and Signing. Rule Version (STIG-ID): 3.077 Configure the system to require the use of FIPS compliant algorithms. Navigate to Local Policies -> Security Options. If the value for "System cryptography: Use FIPS compliant algorithms for encryption, hashing, and signing" is not set to "Enabled", then this is a finding.


OWA 2010 – “cannot open this document for viewing because of an unexpected error”

$
0
0

 

 

PROBLEM DETAILS & SYMPTOMS

 

Unpredictably, intermittently, and frequently clients trying to open office documents (word, excel, powerpoint, etc) in the browser from the SharePoint 2010 farm using office web apps get an error in the browser instead of the document.  

Sometimes the error includes a correlation ID and sometimes it doesn't.  

An examples of the error messages are: 

 

Word Web App cannot open this document for viewing because of an unexpected error.  To view this document open it in Microsoft Word.  Error ID: ….. OK

 

And

 

PowerPoint Web App cannot open this presentation for viewing because of an unexpected error.  To view this presentation, open it in Microsoft PowerPoint.

 

No corrective action needs to be taken for the problem to go away.  Refreshing the page several times is usually enough to get the document to open in OWA.

The documents do open fine in the Office client.

Confirmed in Central Admin that the Word Viewing Service (for example) is actually running on the expected SharePoint servers.

Examining the httperr logs (c:\windows\system32\logfiles\httperr) showed no good clues. There were, for example, no interesting mentions of cellstorage.svc.

Renaming one of the offending office documents doesn't change the behavior.

Verbose ULS logging while reproducing the problem turned up these interesting bits of data:

 

04/15/2014 10:43:49.76 w3wp.exe (0x1A04) 0x48A8 Office Web Apps Office Viewing Architecture b4vw Medium RequestDispatcher: dispatching request for document F6f53802479144af8b60b8aafe6051580m486879ca364a4e15bf6e56464c0527adm1b304927e3e04ccb85575838653825f1m to http://web1:32843/e313c22d07334006870adf2aaccf2d45/Conversion.svc. 33bf84b3-f74f-4a7f-a75b-884dab5e4dc6

 

04/15/2014 10:43:49.78 w3wp.exe (0x2754) 0x0F54 Office Web Apps Office Viewing Architecture bv6p Unexpected Exception thrown downloading file C:\Windows\TEMP\waccache\e313c22d-0733-4006-870a-df2aaccf2d45\TREASURYECM_SpServices\3d42c3c8-45b5-413a-874a-f31e9ea69bcc\output.docx: System.ArgumentException: SharepointReaderAsync: no SPFile     at Microsoft.Office.Web.Environment.Sharepoint.SharepointReaderAsync.End()     at Microsoft.Office.Web.Conversion.Framework.DownloadManager.OnFileReadComplete(IAsyncResult ar) 33bf84b3-f74f-4a7f-a75b-884dab5e4dc6

 

04/15/2014 10:43:49.78 w3wp.exe (0x2754) 0x0F54 Office Web Apps Office Viewing Architecture fvj9 Unexpected DownloadManager: Download FAILED for document F6f53802479144af8b60b8aafe6051580m486879ca364a4e15bf6e56464c0527adm1b304927e3e04ccb85575838653825f1m; Time spent: 2ms. 33bf84b3-f74f-4a7f-a75b-884dab5e4dc6

 

 

Suggestions / Recommendations

 

The following are suggestions to consider. As usual, standard disclaimers apply.

 

First, per http://support.microsoft.com/kb/2521084, one common cause for this symptom is that "the application pool account was unable to access the content database" and that a possible solution is "we changed the application pool account password and synced it with sharepoint" or to give the service account DBOwner rights on the content database.    "Make sure the application pool account and word viewing service account have dbo access to the content databases."

 

It might also be a good idea to check the application event log(s) for these types of messages:

Log Name:      Application
Source:        Microsoft-SharePoint Products-SharePoint Foundation
Event ID:      3760
Task Category: Database
Level:         Critical
Description:
SQL Database 'db_.........WSS_Content' on SQL Server instance '…..' not found. Additional error information from SQL Server is included below.
 Cannot open database "db……WSS_Content" requested by the login. The login failed. Login failed for user '…'.

Some people have said that just changing the account of that the application pool and/or the word viewing service (or powerpoint viewing service or other OWA service) to the farm account temporarily and then changing it back to the original service account helps.

Also you may need to use the sysinternals Process Monitor to find "access denieds" on temp folders.

 

Second, one suggestion is to ensure that the content database has been updated to match the SharePoint version.  Please check the database version level and dll versions per the steps below:

   

Go to Central Admin > Operations >  Servers in farm. 

Note version number and send to me please. 

(This is the version of the databases.)

   

Open this folder on all the SharePoint servers:   c:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI (ßThe 14 hive there assumes this is

Look for OWSSVR.dll and Microsoft.SharePoint.Portal.dll

Please send me the file version number on each.

 

If the versions don't match up, I'd recommend running either psconfigUI.exe (the configuration wizard) or psconfig.exe (psconfig –cmd upgrade –inplace b2b –wait).   

 

 

Third, ensure that the following folders and processes are excluded from real-time-antivirus-scanners:

 

File:
  • C:\windows\temp\waccache
  • C:\windows\temp\powerpointcache

 

 

Process:
  • AppServerHost.EXE
  • EditServerHost.EXE
  • CCSRV.EXE
  • CSISRVEXE.EXE

 

Other RTAV exclusion information can be found here:   http://blogs.msdn.com/b/chaun/archive/2013/08/01/do-we-really-need-to-set-antivirus-exclusions-up-for-our-sharepoint-servers.aspx

 

Fourth, sometimes these errors are judged to be caused by WAC Cache Corruption.  If so, the solution here is to rebuild the WAC cache per  http://blogs.technet.com/b/wbaer/archive/2010/09/01/the-office-web-applications-cache.aspx.  Excerpt:

 

Clearing the Cache

To clear the Office Web Applications cache you will need to clear the server file system cache and the Site Collection cache for the Web application.

1.      Delete the cache files from the server file system cache

2.      Delete the cache files from the site collection cache

 

Maybe try running the Office Web Apps Expiration Timer job first.  

 

Fifth, t might be a good idea to look into the question of whether or not the hardware load-balancer uses sticky sessions of some kind or not.

Best Practices for CRL Checking on SharePoint Servers

$
0
0

 

 

Problem

 

The fact is that SharePoint 2010 servers think they need to be able to reach out to http://crl.microsoft.com. They need get a current list of certificates for revoked (expired, key compromised, CA compromised, etc.) certificates.

But that's not an option for most of the SharePoint servers I work with. It's common for firewalls that prevent such outbound http calls and therefore prevent CRL checking. The inability to check the CRL (certificate revocation list) can create a myriad of strange performance problems and timeouts for w3wp.exe's, owstimer.exe, asp.net, and .net applications. Sometimes those problems are pretty easy to figure out with a bit of research (like a 15 second delay when browsing to a SharePoint page after an IISRESET) and sometimes the problems that show up are more mysterious.

There are dozens of blogs on this subject and a variety of approaches people take. So why write on this again? There are at least eight somewhat bewildering options that Admins may be forced to choose from. Sometimes one of those options works well for one farm and doesn't work well for another farm with a similar problem. Sometimes the impulse to get the problem fixed is stronger than the impulse to abide by best security best practices. Some of the advice is dated and deserves improvement. Also it's not clear what applies to SP2007, to SP2010, and/or to SP2013. I'm going to attempt to consolidate and evaluate all the options.

 

Detection

 

If a SharePoint server doesn't have access to the CRL, I expect that you've got some kind of CRL checking problem to one degree or another.

One good way to determine whether or not you need to consider one or more of these options for your servers is to set up CAPI2 logging. It's not enabled by default but it's easy to do. Steps can be found at http://support.microsoft.com/kb/2625048. (Also see http://www.microsoft.com/en-us/download/details.aspx?id=18844)

Another way that this problem is often detected is for a fiddler/netmon/wireshark trace is performed while reproducing the problem and calls to crl.microsoft.com are noticed. Sysinternals Utilities such as Process Monitor and Process Explorer can also show this traffic. It might be good to restart IIS and restart the SharePoint timer service while doing this.

You could also task your network administrator with checking the firewall/proxy logs (in a 72 hour period?) to see which servers are making calls to crl.microsoft.com.

 

Option 1 - Adjust a FIREWALL RULE to permit traffic from the servers to crl.microsoft.com

 

When a SharePoint Administrator asks a Network Administrator to open a hole in a firewall, the Network Admin usually laughs a knowing-laugh and says, "Not unless you can give me a really good reason!" The answer of, "So SharePoint will perform better," isn't usually good enough. But I'd highly recommend revisiting this option.

Try asking the network admin / security engineer to look at the logs produced by the firewall/proxy to get a sense of the frequency of calls to crl.microsoft.com. This information also would show which servers are making these calls. And from there perhaps a firewall rule can be adjusted to be adequate-but-still-strict.

This option is the most effective solution and it ironically may also be the most secure options. It avoids the problem of disabling the CRL checking—something that does tend to be a good idea from a security standpoint. Most of the other options in this list disable CRL checking in one way or another and that's not really a best security practice. I'm not the only one saying this. Consider these quotes:

  • "Note that disabling CRL check is not recommended in a production environment, unless you are troubleshooting an issue and wants to isolate if the problem is related to CRL validation. Make sure to turn it on again after performing the validation. . . While it is important to keep secure access to Internet from the enterprise standpoint, it is also important to make sure that applications that require Internet access to validate CRL are capable of doing it. CRL checking is a secure mechanism that helps validate the validity of a certificate. . . make sure to add crl.microsoft.com to the list (on your firewall or proxy) and you should avoid issues of this nature." (Reference)
  • ". . . disabling this option is not recommended for security reasons" (Ref.)
  • "Unblock access to the above URL so CRLs can be retrieved when needed. This is the *PREFERRED* approach." (Ref.)
  • "PREFERRED RESOLUTION: Allow the server and the services accounts to access the crl.microsoft.com domain." (Ref.)

 

Option 2 - Add crl.microsoft.com to the HOST FILE and point it to the local address

 

It is very common for a SharePoint Admin to add crl.microsoft.com to the host files of their SharePoint servers and point it to 127.0.0.1. This is certainly easy to do and is usually enough to keep the biggest, most obvious sharepoint performance problems problems at bay. However, the CRL is not at 127.0.0.1. So right there I think this is not the best possible solution. The processes on the server that want to check the CRL still cannot check the CRL. Maybe you avoid having to wait for a timeout this way but maybe there are better options for both performance, security, and thoroughness. Several people report that this isn't always good enough to stop all crl checking related problems.

 

Option 3 - Set generatePublisherEvidence to FALSE in in a .config file

 

This option is easy to implement, is highly recommended by many reputable sources, tends to give really good results (solves problems that the host file entry doesn't always solve), and has the added advantage of being able to be applied with impressive granularity. For example, it can be applied in a web.config file for a specific web application, a root web.config file so that many/all web applications are affected, or in an owstimer.exe.config file to only helps the owstimer.exe process.

SharePoint uses .NET and ASP.net. .NET applications (all managed code) attempts to download the CRL for any signed assembly it loads on startup. This is normal. Setting generatePublisherEvidence to false prevents that.

Should it be done? I note how MSDN seems to recommend it: "We recommend that services use the <generatePublisherEvidence> element to improve startup performance. Using this element can also help avoid delays that can cause a time-out and the cancellation of the service startup." The same article explains that most asp.net/.net applications don't need to verify the signatures (certificates, and therefore CRLs): "The common language runtime (CLR) tries to verify the Authenticode signature at load time to create Publisher evidence for the assembly. However, by default, most applications do not need Publisher evidence. Standard CAS policy does not rely on the PublisherMembershipCondition. You should avoid the unnecessary startup cost associated with verifying the publisher signature unless your application executes on a computer with custom CAS policy, or is intending to satisfy demands for PublisherIdentityPermission in a partial-trust environment. (Demands for identity permissions always succeed in a full-trust environment.)"

The same article also clarifies, "[i]n the .NET Framework 4 and later, this element has no effect on assembly load times." This suggests to me that this option is more important for SharePoint 2010 (which uses .net 2.0/3.5) than for SharePoint 2013 (which uses .net 4.0/4.5).

The fact that it is recommended for aspnet.config and for owstimer.exe.config by a SharePoint Escalation Engineer here is also encouraging.

The easy part is modifying the config file with one simple, short line:

<configuration>

<runtime>

<generatePublisherEvidence enabled="false"/>

</runtime>

</configuration>

The not-so-easy part is deciding config file(s) to add it to? A web.config file? If so, which web.config file? (There are many to choose from!) What about adding it to an owstimer.exe.config file? (Often overlooked.) What about other .net applications and services that might also run on a SharePoint server? Do you need to create a config file named <ApplicationName>.exe.config and add the line to it? I like the fact that you've got great granularity here. But that might increase the odds of setting it at the less than optimal place. If you want to set it for some specific process or specific web application, you can. And if you want to set it at a "global level" or "root level" instead you can do that. But even at the root level you have some options to wade through. Which of these files should you edit?

C:\Windows\Microsoft.NET\Framework\v2.0.50727\aspnet.config

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet.config

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\machine.config

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config

C:\Windows\Microsoft.NET\Framework\v3.5\aspnet.config

C:\Windows\Microsoft.NET\Framework\v3.5\CONFIG\machine.config

C:\Windows\Microsoft.NET\Framework\v3.5\CONFIG\web.config

C:\Windows\Microsoft.NET\Framework64\v3.5\aspnet.config

C:\Windows\Microsoft.NET\Framework64\v3.5\CONFIG\machine.config

C:\Windows\Microsoft.NET\Framework64\v3.5\CONFIG\web.config

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\machine.config

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config\web.config

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\CONFIG\web.config

C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\15\CONFIG\web.config

 

Some bloggers go for the aspnet.config file (ref.1, ref.2) recommends making the change at the aspnet.config file. This would affect all the web application and websites that use asp.net. It doesn't affect any process that uses CLR/.Net. Setting it at the machine.config level would disable it not just for asp.net but all .net/managed code running on the server.

One fine point here is that SharePoint 2010 uses 2.0 and 3.5. So you might want to edit the config file of your choice in both the 2.0 and 3.5 folders. It might be a good idea to do it in the x86 and x64 folders too.

SharePoint 2013 uses .net 4.0. So there is probably no need to make any changes in the 2.0 or 3.5 folders.

If you decide to set it at "the hive level" (14\CONFIG and/or 15\CONFIG) you might expect the web.config in the 14 hive to affect the site collections running in 2010 mode (which is possible on a SP2013 server if you upgraded the database from SP2010 but didn't upgrade the site collection) while the web.config in the 15 hive should affect site collections running in 2013 mode.

It's also good to keep in mind that that disabling the generation of publisher evidence in a web.config file or aspnet.config file won't affect Owstimer.exe. For SharePoint servers running owstimer.exe, you may want to consider creating an owstimer.exe.config file. (Ref.)

 

 

Option 4 – Export the SharePoint Root Authority certificate of the farm and import it into the Trusted Root Certification Authorities store of each SP server in the Farm

 

This option comes from "Workaround 1" in http://support.microsoft.com/kb/2625048 ("Site slowness because of SharePoint STS certificate CRL Checking"). It is also recommended as workaround 1 in http://support.microsoft.com/kb/2672574 (SharePoint 2010 – Performance issue on external BDC lists).

I'm a big fan of this option. I like this option because it doesn't seem controversial to me that SharePoint servers in a farm should trust this certificate. I'm a little surprised that this doesn't happen the moment a server is joined to the farm. When a SharePoint farm is created, a root certificate is created for the servers in that farm to use for internal communication. The validity of that certificate is checked frequently. If this certificate is found in the local certificate store of the sharepoint server, trust is assured and communication goes on like it should. If the certificate is needed and it is not in the local store of the server, the server tries to validate the certificate over the network. This can cause unwanted delays.

Another thing I like about this option is that it doesn't disable any CRL checks. It's less controversial from a security standpoint than some of the other options then. But it's also not going to cover as wide a variety of problems as other options may give.

 

 

 

Option 5 - Disable the automatic update of root certificates on the SharePoint Servers

 

Technically this option really has nothing to do with CRL checking or the lack thereof. But it does often come up in the discussion of CRL checking and possible causes for performance problems in SharePoint BDC, Infopath Services, or anything that relies on the Secure Store service. This is discussed in detail at http://support.microsoft.com/kb/2672574 (SharePoint 2010 – Performance issue on external BDC lists).

This option is found in several articles on the internet. Most interestingly it is found as Workaround 2 in http://support.microsoft.com/kb/2672574 and again as workaround 2 in http://support.microsoft.com/kb/2625048. Personally I prefer workaround 1 in both instances. But it's good to know what all the options are.

KB 2672574 gives the best hint as to why one should or shouldn't do this: "There should not be specific implications to SharePoint since we are using self-signed certs and manage them ourselves. The SharePoint certificates do have an expiry and we do have a health rule that watches for that IIRC and will warn the admin to update/re-roll them. The main aspect to think through is for "other" certificates used on the box (like SSL certificates, certificates to trust download packages or for SAFER policy etc) which are issues from certificates chained to those in the TRC store."

The gist of it is to launch gpedit.msc as admin on the SharePoint server(s). (This assumes that it's not all greyed out due to being controlled by Group Policy.) Drill down into Local Computer policy > Windows Settings > Security settings > Public Key Policies. Double-click the Certificate Path Validation Settings. In the Network retrieval tab, add a checkmark beside "Define the policy settings" and uncheck the option to "Automatically update certificates in the Microsoft Root Certificate Program (recommended)." Run gpupdate /force.

 

 

 

Option 6 - Change the registry key for Software Publishing "State" value to '0x00023e00'

 

One common workaround to attempt to disable CRL checking is to open the registry and set HKEY_USERS\S-1-5-20\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing "State" to dword:00023e00.

The steps are simple:

Start Registry Editor (Regedit.exe)

Navigate to HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing

On the left side pane look for State key and double click to open it

Change the Value data to 146432 Decimal or 0x00023e00 Hexadecimal

No reboot is needed.

 

When "State" is set to 00023e00, certificate revocation is turned OFF. When "State" is set to 00023c00, it is turned on.

I admit that this can help avoid some CRL checking problems. But I am not very favorable towards it because (1) it's not a best practice from a security standpoint, (2) it's not very granular or flexible, (3) it seems like it should guarantee to solve all CRL checking related problems but there are times when it does not solve them.

One of the possible reasons it may not solve all CRL related problems is that sometimes the HKEY_CURRENT_USER entry may not be adequate. It *may* also need to be applied to locations as well, such as:

  • HKEY_USERS\S-1-5-18\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing
  • HKEY_USERS\.DEFAULT \Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing

In theory, a Process Monitor trace should show whether these keys are being touched or not. HKCU works for the "current user" but may not have anything to do with the service accounts that your application pools, for example, are running under.

 

 

Option 7 - Download and Import the fresh CRLs from crl.microsoft.com every month

 

If your servers are unable to reach out to http://crl.microsoft.com due to strict security policies but you also want to continue checking CRLs, you can.

You can download copies of the lists simply by browsing to these URLs:

 

There could be other CRLs that you might need. This is where CAPI logging comes in handy. The CAPI2 logs should show you which processes are reaching out to specific CLRs. Example:

 

But then you need to put them somewhere.

You can use certutil (already on your server) to import those CRLs to the local CRL store of each and every SharePoint Server.

The commands are simple:

Certutil –addstore CA CodeSignPCA.crl

Certutil –addstore CA CodeSignPCA2.crl

Certutil –addstore CA microsoftrootcert.crl

Certutil –addstore CA CSPCA.crl

Certutil –addstore CA MicCodSigPCA_08-31-2010.crl

 

Similarly, but as an alternative, you could place the downloaded .crl files on an IIS website, for example, that is accessible to the SharePoint servers, has directory browsing enabled, that is listening on port 80, and has a folder structure of pki/crl/products. And then you could create either an internal dns entry (or several hostfile entries) that resolve crl.microsoft.com to the IP address of the web server. The idea here of course is that whenever a server reaches out to http://crl.microsoft.com/pki/crl/*, they end up getting the CRLs from what amounts to an internal mirror.

So why don't more people do this? There is a catch here. Those CRLs are set to expire every two months (?) or so. They're always getting replaced by fresh CRLs. And if a certificate were revoked, the CRL might get replaced sooner than the two month expiration date. Even though it's easy to download the CRLs and import them, it's not something an Admin is going to want to do every two months. It is something that could be scripted, but that's a hassle too.

 

 

 

Option 8 - Uncheck "Check for publisher's certificate revocation" in Internet Explorer's Internet Options

 

Many have used the simple option of opening Internet Explorer on the servers, expanding the TOOLS menu, selecting Internet Options, selecting the Advanced tab, and unchecking the box beside "Check for publisher's certificate revocation."

(Some also might tempt the reader to also uncheck "Check for server certificate revocation.")

The main appeal to this is how simple it is. And it seems to work for solving many CRL checking problems. It disables CRL checking for pretty much everything on the server. It was especially popular in the days of ASP.net 1.1 and ASP.net 2.0 (before the ability to disable generatePublisherEvidence was added to 2.0).

I unchecked "Check for publisher's certificate revocation" on a test machine while running Procmon and saw that the majority of the changes made by unchecking this revolved around keys in the HKLM\SOFTWARE\Microsoft\Internet Explorer\AdvancedOptions\CRYPTO\ area, there was also a change at HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\WinTrust\Trust Providers\Software Publishing – STATE.

Here is a screenshot of the salient part of the procmon capture:

 

 

So ultimately this is the same as Option 6. But to minimize the number of registry changes, I'd recommend option 6 over this one.

 

 

Thanks for taking the time to read this. I invite you to leave comments that will help me improve this blog.

 

 

Sources

 

http://support.microsoft.com/kb/2625048 Site slowness because of SharePoint STS certificate CRL checking

http://msdn.microsoft.com/en-us/library/bb629393.aspx<generatePublisherEvidence> Element

http://blogs.msdn.com/b/spses/archive/2012/08/29/crl-verification-failure-sharepoint.aspx

http://blogs.msdn.com/b/paulking/archive/2011/04/29/bypassing-the-crl-check-on-clr-startup.aspx

http://blogs.msdn.com/b/pfedev/archive/2008/11/26/best-practice-generatepublisherevidence-in-aspnet-config.aspx Best Practice - <GeneratePublisherEvidence> in ASPNET.CONFIG

http://social.technet.microsoft.com/wiki/contents/articles/2303.understanding-access-to-microsoft-certificate-revocation-list.aspx Understanding Access to Microsoft Certificate Revocation List

http://blogs.msdn.com/b/tom/archive/2008/10/28/web-site-stops-responding-for-15-25-seconds.aspx Web Site Stops Responding for 15-25 seconds

http://blogs.msdn.com/b/tess/archive/2008/05/13/asp-net-hang-authenticode-signed-assemblies.aspx ASP.NET Hang: Authenticode signed assemblies

http://blogs.msdn.com/b/gregmcb/archive/2008/05/06/ssl-and-authenticode-causes-crl-lookups-if-your-machine-cannot-access-the-crl-for-verification.aspx SSL and Authenticode Causes CRL lookups if Your Machine Cannot Access the CRL for Verification

http://support.microsoft.com/kb/2672574 SharePoint 2010 – Performance issue on external BDC lists

http://blogs.msdn.com/b/sharepointdev/archive/2011/02/08/error-the-sandboxed-code-execution-request-was-refused-because-the-sandboxed-code-host-service-was-too-busy-to-handle-the-request.aspx

http://blogs.msdn.com/b/asiatech/archive/2011/04/26/asp-net-application-loads-slowly-the-first-time.aspx

http://blogs.msdn.com/b/mcsnoiwb/archive/2012/04/25/how-to-speed-up-sharepoint-management-shell-startup.aspx

http://blogs.msdn.com/b/gregmcb/archive/2008/05/06/ssl-and-authenticode-causes-crl-lookups-if-your-machine-cannot-access-the-crl-for-verification.aspx

http://support.microsoft.com/default.aspx?scid=kb;EN-US;915850

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/seccrypto/security/wintrustsetregpolicyflags.asp

http://blogs.msdn.com/b/andreal/archive/2008/07/19/wcf-service-startup-too-slow-have-you-thought-to-crl-check.aspx

http://support.microsoft.com/kb/936707/

http://msdn.microsoft.com/en-us/library/aa388197

http://msdn.microsoft.com/en-us/library/windows/desktop/aa387700(v=vs.85).aspx

http://www.pdfsharepoint.com/error-sandboxed-too-busy-handle-request/

http://www.microtom.net/microsoft-sharepoint-products/how-to-make-sharepoint-faster

http://bizbert.com/bizbert/2007/03/24/BizTalk+And+Certificate+Revocation+Lists+CRLs+Part+II.aspx

 

 

 

Additional keywords:

The revocation function was unable to check revocation because the revocation server was offline

Why is CLR Requesting to resolve an assembly via BDC over and over?

$
0
0

 

 

Symptoms

 

Under a heavy client load a performance problem develops in your SharePoint 2010 or SharePoint 2013 farm's WFEs. It's hard to figure out what is and what isn't affected by the perf problem. Workflows that once took 30 seconds to run might take six minute to run and then timeout. Deploying a solution to the sandbox might fail with a timeout. Sometimes just opening a form dialogue box might take a long time and timeout. It's hard to connect the dots. The problem goes away after an IISRESET or an application pool recycle but after load increases, eventually the problem returns. You can't seem to figure out what the first cause is. You can't seem to trigger it.

So of course you amp up the ULS logging to verbose and notice a pattern you haven't seen before. CLR is requesting to resolve one or more assemblies over and over. And over and over. There is no pattern to which assembly is attempting to be resolved. Just when you think you can predict that it's going to be something related to XML Serialization (System.Xml.XmlSerializers, mscorlib.XmlSerializers, Nintex.Workflow.XmlSerializers, SharePointUI.WebParts.XmlSerializers, Microsoft.Office.Search.XmlSerializers, Microsoft.SharePoint.AddGallery.Server.XmlSerializers) that needs resolution, your beautiful theory gets dashed to pieces. Next time you visit the uls logs after seeing the problem maybe the assembly in focus turns out to be Microsoft.ReportingServices, Microsoft.Office.Excel.Server.HostExtensionWac, Microsoft.Rtc.ServerConfiguration, Microsoft.Rtc.InternalMedia, Microsoft.SharePoint, BihConsumerInterop, VJSharpCodeProvider, or something else. After searching for these messing assemblies you realize that these assemblies aren't actually dlls that live on the file system of the WFE. They're not in the GAC, they're not in a Bin folder, and they're not in an asp.net temp folder.

And they're certainly not in your BDC catalog. What? BDC? Yeah, if it doesn't seem weird that CRL is trying to resolve these assemblies (isn't that what CLR always does?) you realize that it's making calls to the BDC catalog to resolve them. The ULS logs make that clear. It dawns on you that the "CLR requesting to resolve assembly" (uls tag 9uq0) means that CLR already tried to resolve the assembly from the normal local places, gave up on that, and began attempting to find them in the BDC catalog. That in and of itself isn't necessarily weird if you've run the powershell cmdlet Import–SPBusinessDataCatalogDotNetAssembly in the past. That opens the door to allowing .net to use BDC as something of a probing path. But of course those assemblies aren't going to exist in your BDC catalog. So that's is a significant part of the problem.

As you peer deeper into the ULS logs you notice a new pattern. You see GetServiceApplicationID#1. A little further down in the log you see GetServiceApplicationID#2. You trace it out 3, 4, 5, 6, 7… 56, 57, 58, 59… 94, 95, 96, 97, 98, 99. There is clear iteration one by one up the list. And every time it is attempting to talk across the wire to one of your BDC servers. It gets worse. It doesn't stop at 99. You think CLR might give up on the BDC catalog after trying 99 times but it doesn't. It does it several more times and repeats GetServiceApplicationID#99 over and over and over until there is a thread abort exception and SharePoint removes the BDC server from the sharepoint load balance. Yep, that's also a facet of this multi-faceted performance problem. Multiply this times a bunch of users and your WFEs are well on their way to being overwhelmed. Maybe your BDC servers are getting pushed to their limits too.

Under a light load, the problem doesn't seem to occur. It only happens during a heavy load on the WFEs. It may also only happen if there is a significant amount of communication going on between WFE and BDC servers. Also the problem might not happen until a dynamically generated assembly (like an xml serializer for example).

 

 

Screenshots

 

Here are some images of what the 9uq0's look like, as filtered in ULSviewer.exe. Note how you have several resolve requests for the same assembly on the same correlation ID. . .

 

 

 

 

 

ULS Excerpts of one Correlation ID

 

We reproduced the problem one time when it was at its worst and used a very simple Nintex workflow as our victim. (To be clear, Nintex was not the cause of the problem but was one of the many victims.) What should have taken a few seconds to run took six minutes of slow, painful, futile running before the looping ended with an exception. I don't think many people are going to see this problem, but if you do, recognizing the pattern in the ULS logs is probably going to be the thing that leads you to this blog. After filtering in ULSViewer to a single correlation ID (the ID we got when the page timed out) the log file occupied 1,300 pages of a word document. No exaggeration there. I'm just going to give a few excerpts of that log file as an example.

05/05/2014 17:47:31.13    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Logging Correlation Data    xmnv    Medium    Name=Request (GET:https://MyGreatWebApplication:443/7g/LogicalAccess/_layouts/NintexWorkflow/StartWorkflow.aspx?TemplateID=%7B6bc8d4a9-31e2-4e07-af45-2ddf36af1dfd%7D&Source=https%3A%2F%2FMyApplication%2Efrb%2Eorg%2F7g%2FLogicalAccess%2F%5Flayouts%2Fworkflow%2Easpx)    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    9uq0    Medium    CLR Requesting to resolve assembly : System.Xml.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4u    Verbose    Entering Bdc

loadBalancer.BeginOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4v    Verbose    Completed Bdc loadBalancer.BeginOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4w    Verbose    Entering Bdc proxy.GetChannel()    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4x    Verbose    Completed Bdc proxy.GetChannel()    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4y    Verbose    Entering Bdc 'GetServiceApplicationId' in BdcServiceApplicationProxy.    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:31.70    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Topology    e5mc    Medium    WcfSendRequest: RemoteAddress: 'http://ServerName003:32843/50d8547d1c894ca99b11a7ac533b6441/BdcService.svc/http' Channel: 'Microsoft.SharePoint.BusinessData.SharedService.IBdcServiceApplication' Action: 'http://www.microsoft.com/Office/2009/BusinessDataCatalog/BusinessDataCatalogSharedService/GetServiceApplicationId' MessageId: 'urn:uuid:89bdfe36-e820-4e9d-ac84-0febc78dcc3d'    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:31.94    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (ExecuteWcfOperation:http://www.microsoft.com/Office/2009/BusinessDataCatalog/BusinessDataCatalogSharedService/GetServiceApplicationId). Execution Time=219.651170749355    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:32.37    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4z    Verbose    Completed Bdc 'GetServiceApplicationId' in BdcServiceApplicationProxy.    df635b9b-104d-4fef-9e88-a351d604a4ce

 

 

05/05/2014 17:47:32.37    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#2). Execution Time=218.291221370314    df635b9b-104d-4fef-9e88-a351d604a4ce

 

Skipping a bit. . .

 

05/05/2014 17:47:33.26    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#6). Execution Time=218.146580082105    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:33.26    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    9uq0    Medium    CLR Requesting to resolve assembly : System.Xml.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089    df635b9b-104d-4fef-9e88-a351d604a4ce

 

Skipping a lot. . .

 

05/05/2014 17:47:54.09    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#98). Execution Time=217.661392718907    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.09    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    9uq0    Medium    CLR Requesting to resolve assembly : System.Xml.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#99). Execution Time=218.146370558269    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    9uq0    Medium    CLR Requesting to resolve assembly : System.Xml.XmlSerializers, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4u    Verbose    Entering Bdc loadBalancer.BeginOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4v    Verbose    Completed Bdc loadBalancer.BeginOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4w    Verbose    Entering Bdc proxy.GetChannel()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4x    Verbose    Completed Bdc proxy.GetChannel()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4y    Verbose    Entering Bdc 'GetServiceApplicationId' in BdcServiceApplicationProxy.    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.31    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Topology    e5mc    Medium    WcfSendRequest: RemoteAddress: 'http://ServerName003:32843/50d8547d1c894ca99b11a7ac533b6441/BdcService.svc/http' Channel: 'Microsoft.SharePoint.BusinessData.SharedService.IBdcServiceApplication' Action: 'http://www.microsoft.com/Office/2009/BusinessDataCatalog/BusinessDataCatalogSharedService/GetServiceApplicationId' MessageId: 'urn:uuid:3af45f1d-d121-4170-8bff-70406b926145'    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.53    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (ExecuteWcfOperation:http://www.microsoft.com/Office/2009/BusinessDataCatalog/BusinessDataCatalogSharedService/GetServiceApplicationId). Execution Time=217.203233930569    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.53    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4z    Verbose    Completed Bdc 'GetServiceApplicationId' in BdcServiceApplicationProxy.    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.53    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff51    Verbose    Entering loadBalancer.EndOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.53    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff52    Verbose    Completed loadBalancer.EndOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:47:54.53    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#99). Execution Time=218.343811853182    df635b9b-104d-4fef-9e88-a351d604a4ce

 

Skipping a bit. . .

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#99). Execution Time=217.00397676241    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    9uq0    Medium    CLR Requesting to resolve assembly : Nintex.Workflow.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=913f6bae0ca5ae12    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4u    Verbose    Entering Bdc loadBalancer.BeginOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4v    Verbose    Completed Bdc loadBalancer.BeginOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4w    Verbose    Entering Bdc proxy.GetChannel()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4x    Verbose    Completed Bdc proxy.GetChannel()    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff4y    Verbose    Entering Bdc 'GetServiceApplicationId' in BdcServiceApplicationProxy.    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.22    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Topology    e5mc    Medium    WcfSendRequest: RemoteAddress: 'http://ServerName004:32843/50d8547d1c894ca99b11a7ac533b6441/BdcService.svc/http' Channel: 'Microsoft.SharePoint.BusinessData.SharedService.IBdcServiceApplication' Action: 'http://www.microsoft.com/Office/2009/BusinessDataCatalog/BusinessDataCatalogSharedService/GetServiceApplicationId' MessageId: 'urn:uuid:e0202381-e587-4863-b0c5-a8e6b37cdd1c'    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.43    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (ExecuteWcfOperation:http://www.microsoft.com/Office/2009/BusinessDataCatalog/BusinessDataCatalogSharedService/GetServiceApplicationId). Execution Time=219.366497697333    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.45    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff50    Unexpected    Logging unknown/unexpected client side exception: ThreadAbortException. This will cause this application server to be removed from the load balancer queue. Exception: System.Threading.ThreadAbortException: Thread was being aborted. at System.Net.ConnectStream.Read(Byte[] buffer, Int32 offset, Int32 size) at System.ServiceModel.Channels.DelegatingStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.ServiceModel.Channels.PreReadStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.ServiceModel.Channels.HttpInput.WebResponseHttpInput.WebResponseInputStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.ServiceModel.Channels.DelegatingStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.ServiceModel.Channels.MaxMessageSizeStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.ServiceModel.Channels.DelegatingStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.ServiceModel.Channels.DetectEofStream.Read(Byte[] buffer, Int32 offset, Int32 count) at System.IO.BufferedStream.Read(Byte[] array, Int32 offset, Int32 count) at System.Xml.EncodingStreamWrapper.Read(Byte[] buffer, Int32 offset, Int32 count) at System.Xml.XmlBufferReader.TryEnsureBytes(Int32 count) at System.Xml.XmlBufferReader.GetBuffer(Int32 count, Int32& offset, Int32& offsetMax) at System.Xml.XmlUTF8TextReader.ReadText() at System.Xml.XmlUTF8TextReader.Read() at System.Xml.XmlDictionaryWriter.WriteNode(XmlDictionaryReader reader, Boolean defattr) at System.ServiceModel.Channels.BufferedHeader..ctor(MessageVersion version, XmlBuffer buffer, XmlDictionaryReader reader, XmlAttributeHolder[] envelopeAttributes, XmlAttributeHolder[] headerAttributes) at System.ServiceModel.Channels.MessageHeaders..ctor(MessageVersion version, XmlDictionaryReader reader, XmlAttributeHolder[] envelopeAttributes, XmlAttributeHolder[] headerAttributes, Int32& maxSizeOfHeaders) at System.ServiceModel.Channels.StreamedMessage..ctor(XmlDictionaryReader reader, Int32 maxSizeOfHeaders, MessageVersion desiredVersion) at System.ServiceModel.Channels.Message.CreateMessage(XmlDictionaryReader envelopeReader, Int32 maxSizeOfHeaders, MessageVersion version) at System.ServiceModel.Channels.TextMessageEncoderFactory.TextMessageEncoder.ReadMessage(Stream stream, Int32 maxSizeOfHeaders, String contentType) at System.ServiceModel.Channels.HttpInput.ReadStreamedMessage(Stream inputStream) at System.ServiceModel.Channels.HttpInput.ParseIncomingMessage(Exception& requestException) at System.ServiceModel.Channels.HttpChannelFactory.HttpRequestChannel.HttpChannelRequest.WaitForReply(TimeSpan timeout) at System.ServiceModel.Channels.RequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.SecurityChannelFactory`1.SecurityRequestChannel.Request(Message message, TimeSpan timeout) at System.ServiceModel.Dispatcher.RequestChannelBinder.Request(Message message, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData& msgData, Int32 type) at Microsoft.SharePoint.BusinessData.SharedService.IBdcServiceApplication.GetServiceApplicationId() at Microsoft.SharePoint.BusinessData.SharedService.BdcServiceApplicationProxy.<GetServiceApplicationId>b__9(IBdcServiceApplication serviceApplication) at Microsoft.SharePoint.BusinessData.SharedService.BdcServiceApplicationProxy.Execute[T](String operationName, UInt32 maxRunningTime, ExecuteDelegate`1 operation, Boolean performCanaryCheck, Boolean isChannelThatDelegatesIdentity)    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.45    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Business Data    8085    Critical    The BDC Service application Business Data Connectivity Service Application is not accessible. The full exception text is: Thread was being aborted.    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.45    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff51    Verbose    Entering loadBalancer.EndOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

05/05/2014 17:53:35.50    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Topology    umbj    Verbose    Deserializing the type named Microsoft.SharePoint.SPTopologyWebServiceProxy, Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c and with id abe953a6-438c-4fef-ac20-a6336bd6e493.    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.54    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Topology    8313    Critical    SharePoint Web Services Round Robin Service Load Balancer Event: EndpointFailure Process Name: w3wp Process ID: 5392 AppDomain Name: /LM/W3SVC/2130799115/ROOT-1-130437916205655691 AppDomain ID: 2 Service Application Uri: urn:schemas-microsoft-com:sharepoint:service:50d8547d1c894ca99b11a7ac533b6441#authority=urn:uuid:b0c0f92dc498475482033c35e3fa646b&authority=https://ServerName003:32844/Topology/topology.svc Active Endpoints: 1 Failed Endpoints:1 Affected Endpoint: http://ServerName004:32843/50d8547d1c894ca99b11a7ac533b6441/BdcService.svc/http    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.54    w3wp.exe (0x1510)    0x2238    Business Connectivity Services    Business Data    ff52    Verbose    Completed loadBalancer.EndOperation()    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.54    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    High    Leaving Monitored Scope (Bdc ExecuteOnChannel: GetServiceApplicationId#99). Execution Time=329.925870466777    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.54    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Runtime    tkau    Unexpected    System.Web.HttpException: Request timed out.    df635b9b-104d-4fef-9e88-a351d604a4ce

 

05/05/2014 17:53:35.54    w3wp.exe (0x1510)    0x2238    SharePoint Foundation    Monitoring    b4ly    Medium    Leaving Monitored Scope (Request (GET:https://MyGreatWebApplication:443/7g/LogicalAccess/_layouts/NintexWorkflow/StartWorkflow.aspx?TemplateID=%7B6bc8d4a9-31e2-4e07-af45-2ddf36af1dfd%7D&Source=https%3A%2F%2FMyApplication%2Efrb%2Eorg%2F7g%2FLogicalAccess%2F%5Flayouts%2Fworkflow%2Easpx)). Execution Time=364415.900973448    df635b9b-104d-4fef-9e88-a351d604a4ce

 

 

The Fix

 

There is a fix for this as of May 2014. You can either open a case with Microsoft Support to get it or wait for it to be included in either the June 2014 cumulative update.

 

 

 

 

 

 

      

Additional key words:

Publish a .NET Connectivity Assembly to the BDC Metadata Store LobSystem BDCM System.ResolveEventHandler AppDomain AssemblyResolve Initialize 9upy Release 9upz

Free Tools for the SharePoint Mechanic Toolbox

$
0
0

 

This list is an expansion of an earlier blog of mine. I plan to continue to improve and enlarge this.

 

 

PowerShell andSTSAdm – of course.

 

ULS Viewer– Makes scouring through ULS logs a bit easier on weary eyes.  It's a must have. Some prefer the codeplex version here.

 

Debug Diagnostics 2.x - http://debugdiag.com -  DebugDiag 2.0 was released in October 2013.  I use it all the time for getting hang dumps, crash dumps, and exception dumps. I also appreciate its own scripts for debugging dumps. I've got several blogs on how to use DebugDiag. One of my favorite things to do with debugdiag is to use it to trip a userdump of a SharePoint process when a specific ULS tag is logged to the uls logs. (Read that here.)

 

Process Monitor– to know which files and registry keys are being accessed by various processes. Process Explorer, also from Sysinternals.com, is also good to have.

 

Performance Analysis of Logs (PAL) Tool– for creating Perfmon templates and for analyzing perfmon captures

 

SharePoint Feature Administration and Clean-up Tool– use with caution. Sometimes this is indispensable for cleaning up missing features before an upgrade.

 

Delegconfig v1 and Delegconfig v2 Beta.   I like having both versions when troubleshooting Kerberos related problems.  They're not always easy to get working but usually I can get one or the other to work.  And when they work, they're awesome.  See my list of steps here. Note that neither version works in a .net 4.0 application pool. But it's easy to create a new application pool, have it use the same account that the application pool you're focusing on has, and assign it to a lower .net framework level.

 

Netmon 3.4 + NMParsers + SharePoint Parsers      ||OR||    Message Analyzer which seems to have displaced Netmon.  I also use Wireshark frequently too. 

Sometimes when I'm working with a Windows 2008 R2 server or Windows 7 workstation and we can't wait for any tools like these to be installed, I use NETSH with steps like these:

Open an admin CMD prompt

Type "Netsh trace start capture=yes tracefile=c:\temp\test.etl maxsize=250 persistent=yes"

The above Command Line will Capture Network traffic, place the ETL file in the c:\Temp Directory, with a Max Size of 250, and even Continue Running during/after a reboot

After a Few Minutes Type "Netsh Trace Stop".

Go to the c:\Temp Directory. Open the ETL file with Network Monitor 3.4

   

 

Fiddler2 - for seeing under the hood of Internet Explorer. This tool is not quite in the same category as Netmon, Message Analyzer, or Wireshark. But it's in a similar category. Sometimes it is easier to use fiddler than those other tools. Also it does a better job of decrypting HTTPS traffic if you tell it to. Note that this tool inserts itself as a proxy and therefore if your browser uses a proxy, the use of fiddler will displace that while its running.

 

System.net Tracing– to find out what those web services are hearing and saying?  Works in SP2007 and SP2010.  Just make sure you get the right web.config file(s). This is especially useful for trying to figure out what is going on with WCF services using https.

 

System.webServer Tracing– event tracing for IIS. This is good to know about.

 

Failed Request Tracing - more IIS level tracing.

 

Perfmon.exe – notice that it also can capture event trace data

 

Logparser 2.2– for examining large IIS files in particular. I like using it, for example, to find requests where time-taken is over 5 seconds and requests that get the 500 internal server error. I have heard that some like Log Parser Lizard but I haven't tried it yet.

 

SNAP tool - This tool by Todd Carter is allows you to see which .net exceptions are being thrown.  It doesn't make any memory dumps but it shows exceptions in real-time.  It could have been called "the exception monitor" if that name weren't already taken.   Some of the new functionality in DebugDiag 2.x arguably makes this tool less important. But it's still good to have in the toolbox.

 

Developer Dashboard

 

SQL Profiler trace

 

HTTPERR log - I turn to this first whenever I see 503's being issued to the browser. Found at C:\Windows\System32\LogFiles\HTTPERR. An easy shortcut is to click START > RUN > Logfiles [Enter]

 

 

Windows Performance Toolkit - http://social.technet.microsoft.com/wiki/contents/articles/4847.install-the-windows-performance-toolkit-wpt.aspx

 

Debugging Tools for Windows (mainly for Windbg.exe)

PSSCOR2.dll for asp.net 2.0, 3.0, and 3.5 debugging in windbg.exe

PSSCOR4.dll for asp.net 4.0 debugging in windbg.exe. Note this doesn't work for .net 4.5.

SharePointExt.dll for SharePoint debugging in windbg.exe

 

iDNA/TTTrace.exe – for tracing any process - provided by Microsoft support

PSSDIAG – for SQL Server tracing - provided by Microsoft Support. It includes sql profiler traces but also goes beyond them.

SETH – SharePoint Engineer Troubleshooting Helper – provided by Microsoft Support.  Checks for more than two dozen of the most common problems and potential problems.

 

   

Notes on Debug mode versus Release Mode

$
0
0

 

Dlls compiled in debug mode should stay in the developmental environment while they're being debugged, improved, stepped-through, and tweaked.

When the dll is ready to be deployed (released) to a high-traffic server—such as a SharePoint TEST, QA, or Production Farm—the dll should be recompiled in release mode.

When in debug mode. . .

  1. Expect the memory footprint of the process to be enlarged since debug symbols are required to be loaded.
  2. Expect a substantial performance hit due to the debug and trace statements (System.Diagnostics.DebuggableAttribute) in the output IL code. In debug mode there are several extra instructions added to enable you to set a breakpoint on every source code line a debugger such as Visual Studio.
  3. Also the code will not be optimized by the compiler. JIT optimizations will be disabled. (IsJitOptimizerEnabled)

In release mode. . .

  1. all calls to Debug class methods in your code are disabled.
  2. Code is optimized during the build operation
  3. You cannot take advantage of any source-code level debugging tools. You cannot set breakpoints.
  4. Better performance
  5. Smaller memory footprint

 

 

 

 

 

Viewing all 36 articles
Browse latest View live