Written by Gerald Ramich, Senior Microsoft Premier Field Engineer.
This article is for folks who are trying to troubleshoot Microsoft Outlook Connectivity issues to Exchange servers. I’ll look at a wide number of troubleshooting items, including:
So let’s dive in.
A few thoughts to keep in mind when debugging latency issues:
· Determine the suspected server from the RPC popup. The specific server will be listed and can include the user’s home Exchange server, an Exchange server the user was referred to for public folders, another user’s home Exchange server in the case of Calendar Details in the F/B UI, shared calendar/shared folder, or in delegate access, and Active Directory Servers.
· Collect Exmon ETL data via one of the supported methods. Consistent problems may need only 5 minutes worth of data collection to trace the event. It is important to trace for a period afterwards to allow collection and tracing by the Exchange server. Outlook buffers some monitoring data until its next server communication. Problems that happen sporadically may require multiple hours or days’ worth of collection. ETL file size and server impact is documented in the Frequently Asked Questions.
· Open the ETL data file with the Exmon tool.
· Verify that the user made RPC calls and those calls were traced. Find the user’s display name in the By User view. If the Exchange Server is Exchange 2003 or higher, verify that the IP address of the client appears as the IP address of the client machine in question. If the user’s display name does not appear in the By User view, an RPC call may have been issued and received by Exchange, but no successful Logon operation from that user was received (and thus could not be attributed to any user). Alternatively find the “” (BLANK) user name in the By User view and look for the user’s IP Address. If the IP Address appears in this list, an RPC was received by the Exchange server, but the Logon call failed.
· See if any MAPI operations took longer than 500 milliseconds. Within the By User View, the Max Server Latency will indicate the longest time spent processing a single MAPI operation, but an RPC could contain multiple operations.
· If the Max Server Latency is above 500 milliseconds, double click on the user’s name in the By User view. This will cause a reparse of the ETL file (which can take minutes for extremely large files) and will eventually display a detailed view of the user’s MAPI operations. Find the time frame in question (we have accuracy to about 15 milliseconds) in the By Time view. Verify if other operations took a long amount of time that would have been in the same packet or in packets within close range. It is prudent at this point to verify disk latencies are acceptable within the guidelines given in the Exchange Performance Tuning Whitepaper since the overall latency is determined both by the CPU and Store processing, as well as the timeliness of Jet database accesses by the disk subsystem.
· If roughly 5000 milliseconds cannot be accounted for, network latency may be involved. Check the By Clientmon view (if you’re using both Exchange 2003 and higher and Outlook 2003 and higher) for high max and/or average latencies. Using the By Clientmon view, find the user in the list and verify the user’s IP Address is in the list of IP Addresses. If the IP Address of the client is not in the user’s IP Address list, it is possible no client monitoring data was received. Check both the local and other average and max latencies. High average latencies could indicate an overall bad network condition. If the average is acceptable, the max latencies could be high on account of a momentary network issue or because of a long running MAPI operation. Remember, these latencies are the total round trip time of the packet including network transit and store latencies.
· If latencies are acceptable, check for failed RPC Packets. Failures happen from time to time and do not always indicate a problem, but are a useful step.
· Look out for IP Addresses reported in the By Clientmon view (IP addresses that Outlook thinks it is using based on the NIC/VPN) that differ from the IP Addresses in the By User view (IP address as seen by Store). Differences indicate some sort of proxy server or NAT. Client IP Addresses starting with 192.168.X.X are notoriously Wireless routers (but not a requirement nor definitive). These also indicate that the user may be using RPC/HTTP from a remote location.
Verify TCP Ports on Exchange Server are listening using the RPCDump –i command. Below is example of what to look for.
Note: this is a truncated Output. Search for UUIDs. You will see these twice: once for Outlook Anywhere(RPC/HTTP) and once for regular RPC.
Connection-oriented TCP/IP using Microsoft Internet Information Server as HTTP proxy
LAB-E2K10-CSHT[6001] [5261574a-4572-206e-b268-6b199213b4e4] :ACCESS_DENIED
LAB-E2K10-CSHT[6001] [a4f1db00-ca47-1067-b31f-00dd010662da] :ACCESS_DENIED
LAB-E2K10-CSHT[6002] [1544f5e0-613c-11d1-93df-00c04fd7bd09] Microsoft Exchange RFR Interface :ACCESS_DENIED
LAB-E2K10-CSHT[6004] [1544f5e0-613c-11d1-93df-00c04fd7bd09] Microsoft Exchange RFR Interface :ACCESS_DENIED
LAB-E2K10-CSHT[6002] [f5cc5a18-4264-101a-8c59-08002b2f8426] Microsoft Exchange NSP Interface :ACCESS_DENIED
LAB-E2K10-CSHT[6004] [f5cc5a18-4264-101a-8c59-08002b2f8426] Microsoft Exchange NSP Interface :ACCESS_DENIED
Connection-oriented RPC TCP/IP
LAB-E2K10-CSHT[39627] [5261574a-4572-206e-b268-6b199213b4e4] :YES
LAB-E2K10-CSHT[39627] [a4f1db00-ca47-1067-b31f-00dd010662da] :YES
LAB-E2K10-CSHT[63534] [1544f5e0-613c-11d1-93df-00c04fd7bd09] Microsoft Exchange RFR Interface :YES
LAB-E2K10-CSHT[63534] [f5cc5a18-4264-101a-8c59-08002b2f8426] Microsoft Exchange NSP Interface :YES
A breakdown of example above:
Server: LAB-E2K10-CSHT
Port: [39627]
UUID: [a4f1db00-ca47-1067-b31f-00dd010662da]
Accessible: YES
Resource Kit tools: RPC Dump.
If one or more of these ports are not listening. You can use “Netstat –ano” and compare the ports that are listed in RPCDump to the PID that is listed in Netstat. Verify if another service has this port.
TCP 0.0.0.0:39627 0.0.0.0:0 LISTENING 2804 ß MSExchangeRPC
TCP 0.0.0.0:63534 0.0.0.0:0 LISTENING 5368 ßMSExchnageAB
Restarting the Information store will not re-register a stolen port, A restart is required to register TCP ports.
Typically this error will resemble something like “The name could not be resolved. The name could not be matched to a name in the address list.”
Netmon will show most Kerberos errors. Testing with NTLM in the Outlook profile under the “Security Tab” is also a good option to eliminate Kerberos issues. If Kerberos fails but NTLM auth works, Verify SPNs using SetSPN tool.
setspn -L ExchangeServerName
SPNs should be registered as follows on Exchange Server:
Note: Load Balancers require the Alternative Service Account and SPN registered to the Load balancer FQDN instead of the individual server names.
Note: SPNs could be registered as follows pointing to GCs on Exchange2003/ 2007 servers, this should not be done on Exchange 2010: exchangeAB/<GlobalCatalogServerName>
Once SPNs are verified, I recommend this whitepaper: Troubleshooting Kerberos Errors
This error will typically show up as “Unable to open your default mail folders. The information store could not be opened.”
a. 1XX – Informational
b. 2XX - Success
c. 3XX - Redirection
d. 4XX - Client Error
e. 5XX - Server Error
5. Mainly you will have to focus on the 4XX and 5XX codes.
6. 4XX Codes have Sub codes to further describe the issue, as follows:
a. 400 – Bad Request
i. 400.1 - Invalid Destination Header.
ii. 400.2 - Invalid Depth Header.
iii. 400.3 - Invalid If Header.
iv. 400.4 - Invalid Overwrite Header.
v. 400.5 - Invalid Translate Header.
vi. 400.6 - Invalid Request Body.
vii. 400.7 - Invalid Content Length.
viii. 400.8 - Invalid Timeout.
ix. 400.9 - Invalid Lock Token.
b. 401 – Access Denied (logon issues)
i. 401.1 - Logon failed.
ii. 401.2 - Logon failed due to server configuration.
iii. 401.3 - Unauthorized due to ACL on resource.
iv. 401.4 - Authorization failed by filter.
v. 401.5 - Authorization failed by ISAPI/CGI application.
c. 403 – Forbidden (Access Restrictions)
i. 403.1 - Execute access forbidden.
ii. 403.2 - Read access forbidden.
iii. 403.3 - Write access forbidden.
iv. 403.4 - SSL required.
v. 403.5 - SSL 128 required.
vi. 403.6 - IP address rejected.
vii. 403.7 - Client certificate required.
viii. 403.8 - Site access denied.
ix. 403.9 - Forbidden: Too many clients are trying to connect to the Web server.
x. 403.10 - Forbidden: Web server is configured to deny Execute access.
xi. 403.11 - Forbidden: Password has been changed.
xii. 403.12 - Mapper denied access.
xiii. 403.13 - Client certificate revoked.
xiv. 403.14 - Directory listing denied.
xv. 403.15 - Forbidden: Client access licenses have exceeded limits on the Web server.
xvi. 403.16 - Client certificate is untrusted or invalid.
xvii. 403.17 - Client certificate has expired or is not yet valid.
xviii. 403.18 - Cannot execute requested URL in the current application pool.
xix. 403.19 - Cannot execute CGI applications for the client in this application pool.
xx. 403.20 - Forbidden: Passport logon failed.
xxi. 403.21 - Forbidden: Source access denied.
xxii. 403.22 - Forbidden: Infinite depth is denied.
d. 404 – Not Found
i. 404.0 - Not found.
ii. 404.1 - Site Not Found.
iii. 404.2 - ISAPI or CGI restriction.
iv. 404.3 - MIME type restriction.
v. 404.4 - No handler configured.
vi. 404.5 - Denied by request filtering configuration.
vii. 404.6 - Verb denied.
viii. 404.7 - File extension denied.
ix. 404.8 - Hidden namespace.
x. 404.9 - File attribute hidden.
xi. 404.10 - Request header too long.
xii. 404.11 - Request contains double escape sequence.
xiii. 404.12 - Request contains high-bit characters.
xiv. 404.13 - Content length too large.
xv. 404.14 - Request URL too long.
xvi. 404.15 - Query string too long.
xvii. 404.16 - DAV request sent to the static file handler.
xviii. 404.17 - Dynamic content mapped to the static file handler via a wildcard MIME mapping.
xix. 404.18 - Querystring sequence denied.
xx. 404.19 - Denied by filtering rule.
e. 405 – Method Not allowed
f. 406 – Client browser does not accept Mime Type Request page
g. 408 – Request timed out
h. 412 – Precondition Failed.
7. The Sub number will be in one of two formats
a. 401.1 – Displayed in browser (note: for IIS 7+, the substatus code is only visible from the server console, by default. For security, remote clients are only given the basic 3-digit HTTP status code)
b. 401 1 – Displayed IIS logs at end of string, as long as http substatus logging is enabled (it is by default)
8. 5XX Codes have Sub codes to further describe the issue, as follows:
a. 500 – Internal Server error
i. 500.0 - Module or ISAPI error occurred.
ii. 500.11 - Application is shutting down on the Web server.
iii. 500.12 - Application is busy restarting on the Web server.
iv. 500.13 - Web server is too busy.
v. 500.15 - Direct requests for Global.asax are not allowed.
vi. 500.19 - Configuration data is invalid.
vii. 500.21 - Module not recognized.
viii. 500.22 - An ASP.NET httpModules configuration does not apply in Managed Pipeline mode.
ix. 500.23 - An ASP.NET httpHandlers configuration does not apply in Managed Pipeline mode.
x. 500.24 - An ASP.NET impersonation configuration does not apply in Managed Pipeline mode.
xi. 500.50 - A rewrite error occurred during RQ_BEGIN_REQUEST notification handling. A configuration or inbound rule execution error occurred.
xii. Note Here is where the distributed rules configuration is read for both inbound and outbound rules.
xiii. 500.51 - A rewrite error occurred during GL_PRE_BEGIN_REQUEST notification handling. A global configuration or global rule execution error occurred.
xiv. Note Here is where the global rules configuration is read.
xv. 500.52 - A rewrite error occurred during RQ_SEND_RESPONSE notification handling. An outbound rule execution occurred.
xvi. 500.53 - A rewrite error occurred during RQ_RELEASE_REQUEST_STATE notification handling. An outbound rule execution error occurred. The rule is configured to be executed before the output user cache gets updated.
xvii. 500.100 - Internal ASP error
b. 501 – Header values specify a configuration that is not implemented
c. 502 – Web Server received an invalid response while acting as a gateway or proxy
i. 502.1 - CGI application timeout.
ii. 502.2 - Bad gateway.
d. 503 – Service unavailable
i. 503.0 - Application pool unavailable.
ii. 503.2 - Concurrent request limit exceeded.
9. The Sub number will be in one of two formats
a. 500.0 – Displayed in browser on server console only (see above)
b. 500 0 – Displayed IIS logs at end of string, if http substatus logging is enabled (on by default)
10. So what logging can I turn up outside of IIS?
a. Diags Logging in Exchange
i. MSExchange AutoDiscover
ii. MSExchange Availability (EWS/OOF/AS), Calendar and Free / Busy
iii. MSExchange Control Panel (Option Page in OWA). Outlook 2010 will use the ECP for some features.
iv. MSExchange WebServices (RPC/HTTP, also EWS/OOF/AS)
b. Test Command lets
i. Test-OutlookWebServices (AutoDiscover)
ii. Test-CalendarConnectivity (AS)
1. Only Anonymous and not very useful.
2. Use URL in Apps events
iii. Test-ECPConnectivity
iv. Test-WebServicesConnectivity(RPC/HTTP access)
1. Note: It does not test Calendar, OOF or ECP!
2. Test-OutlookConnectivity (AutoDiscover, Profile Creation, MAPI or RPC/HTTP access)
There is a typo "Exchange 2007/2001, however cached mode is recommended."
Fixed, thanks.