<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Jason Slaughter</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/jasonsla/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/jasonsla/feed.xml</link>
    <description>Rock the CAS box!</description>
    <lastBuildDate>Tue, 16 Apr 2019 06:09:29 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Creating an Outlook Profile for an Alternate User</title>
      <link>https://docs.microsoft.com/archive/blogs/jasonsla/creating-an-outlook-profile-for-an-alternate-user</link>
      <pubDate>Tue, 02 Aug 2016 21:52:42 GMT</pubDate>
      <dc:creator><![CDATA[JasonSla - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/jasonsla/?p=117</guid>
      <description><![CDATA[Imagine you have full-access rights to a mailbox, and you want to create a profile for that user....]]></description>
      <content:encoded><![CDATA[Imagine you have full-access rights to a mailbox, and you want to create a profile for that user.  While you could simply open "Other User's Folder", or add that user's mailbox to your own profile, there may be any number of reasons to create a custom, dedicated profile for that user.

You may be tempted to manually create the profile -- do not do this.  In Exchange 2013 and 2016 there is little to no expectation you will be met with success.  We use the mailbox GUID as the "Server" and really rely on Autodiscover to handle this for you.  We'll get AutoD to hand us the other user's mailbox info, and we'll log on using our own credentials.

Create a new profile in Outlook, but change your answers in the autoconfiguration wizard so we're opening the other user's mailbox.  You want Outlook to send the Autodiscover request for the target user, but authenticate as your own account.  This way we get all the intended client access endpoints, and we're using our own credentials so there's no security issues.

[caption id="attachment_125" align="aligncenter" width="310"]<a href="https://msdnshared.blob.core.windows.net/media/2016/07/Step-1.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/07/Step-1.png" alt="Step 1" width="310" height="127" class="wp-image-125 size-full" /></a> Step 1 - Create a New Profile[/caption]

Replace the auto-populated information with the target user's name and email address.  Ignore the password here, we don't (and probably shouldn't) know the target user's password.

[caption id="attachment_135" align="aligncenter" width="694"]<a href="https://msdnshared.blob.core.windows.net/media/2016/07/Step-2.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/07/Step-2.png" alt="Step 2 - Fill in the wizard" width="694" height="492" class="wp-image-135 size-full" /></a> Step 2 - Fill in the wizard[/caption]

When you click 'Next' here, Outlook will run its auto-configuration routine, and should automatically authenticate as your current desktop user.

[caption id="attachment_145" align="aligncenter" width="694"]<a href="https://msdnshared.blob.core.windows.net/media/2016/07/Step-3.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/07/Step-3.png" alt="Step 3 - Autoconfiguration" width="694" height="492" class="wp-image-145 size-full" /></a> Step 3 - Auto-configuration[/caption]

Clicking 'Finish' will open Outlook (unless you started this wizard from the Mail control panel), and it will attempt to log in.  If you get any authentication prompts, just use your existing credentials.  Remember, this process is for creating a profile when you already have full access to the target mailbox.

[caption id="attachment_155" align="aligncenter" width="439"]<a href="https://msdnshared.blob.core.windows.net/media/2016/07/Step-4.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/07/Step-4.png" alt="Step 4 - Auth as yourself" width="439" height="385" class="size-full wp-image-155" /></a> Step 4 - Auth as yourself[/caption]

You should have a clean profile connected only to the target mailbox.  Success!

[caption id="attachment_165" align="aligncenter" width="497"]<a href="https://msdnshared.blob.core.windows.net/media/2016/07/Step-5.png"><img src="https://msdnshared.blob.core.windows.net/media/2016/07/Step-5.png" alt="Step 5 - Profit!" width="497" height="415" class="size-full wp-image-165" /></a> Step 5 - Profit![/caption]

&nbsp;

Jason Slaughter]]></content:encoded>
    </item>
    <item>
      <title>Distribution Groups cannot be disabled in Office 365</title>
      <link>https://docs.microsoft.com/archive/blogs/jasonsla/distribution-groups-cannot-be-disabled-in-office-365</link>
      <pubDate>Wed, 21 Oct 2015 21:08:06 GMT</pubDate>
      <dc:creator><![CDATA[JasonSla - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/jasonsla/2015/10/21/distribution-groups-cannot-be-disabled-in-office-365/</guid>
      <description><![CDATA[Unlike an on-premise installation of Exchange, there is no mechanism to disable a distribution group...]]></description>
      <content:encoded><![CDATA[<p>Unlike an on-premise installation of Exchange, there is no mechanism to disable a distribution group (DG) in Office 365. &nbsp;In the cloud, the DG exists, therefore it is mail-enabled.</p>
<p>Many administrators would like to retain membership in DGs for a period of time before they are deleted. &nbsp;Whatever the reason, you can accomplish the same with a fairly straightforward workaround -- set the DG to only accept email from a single recipient, and hide the DG from the GAL. &nbsp;You can use a hidden user for this purpose, or simply set it to an admin, etc.</p>
<h3>Configuring a Group</h3>
<p>Hide the DG and configure the allowed sender. &nbsp;Here I set a custom attribute so we can find this DG with a simply query later.</p>
<pre class="log"><strong><span style="font-family:&#39;courier new&#39;, courier;"><span style="color:#0000ff;">Set-DistributionGroup</span>&nbsp;<span style="color:#800080;">ContosoDistributionGroupToDisable@contoso.com</span><span style="color:#000080;"> -HiddenFromAddressListsEnabled</span> <span style="color:#ff6600;">$True</span> <span style="color:#000080;">-AcceptMessagesOnlyFrom</span>&nbsp;<span style="color:#800080;">groupAdminEmail@contoso.onmicrosoft.com</span> <span style="color:#000080;">-RequireSenderAuthenticationEnabled</span><span style="color:#ff6600;"> $True</span> <span style="color:#000080;">-ExtensionCustomAttribute1</span> <span style="color:#800080;">DeleteMeLater</span></span></strong></pre>
<h3>Finding the Group Later</h3>
<p>To easily find the DG later, we filter on that attribute:</p>
<pre class="log"><strong><span style="font-family:&#39;courier new&#39;, courier;"><span style="color:#0000ff;">Get-DistributionGroup</span> <span style="color:#000080;">-ResultSize</span> <span style="color:#800080;">Unlimited</span> <span style="color:#808080;">|</span> <span style="color:#0000ff;">Where-Object</span> {<span style="color:#ff6600;">$_</span><span style="color:#808080;">.</span>ExtensionCustomAttribute1 <span style="color:#808080;">-eq</span> <span style="color:#800000;">&quot;DeleteMeLater&quot;</span>}</span></strong></pre>
<p>Results:</p>
<pre class="log">Name:                   ContosoDistributionGroupToDisable
DisplayName:            ContosoDistributionGroupToDisable
GroupType:              Universal
PrimarySmtpAddress:     ContosoDistributionGroupToDisable@contoso.com</pre>
<h3>Reactivating the Group</h3>
<p>If you later decide to reactivate the group, simply null out the settings we set earlier:</p>
<pre class="log"><strong><span style="font-family:&#39;courier new&#39;, courier;"><span style="color:#0000ff;">Set-DistributionGroup</span>&nbsp;<span style="color:#800080;">ContosoDistributionGroupToDisable@contoso.com</span><span style="color:#000080;"> -HiddenFromAddressListsEnabled</span> <span style="color:#ff6600;">$False</span> <span style="color:#000080;">-AcceptMessagesOnlyFrom</span>&nbsp;<span style="color:#ff6600;">$null</span> <span style="color:#000080;">-RequireSenderAuthenticationEnabled</span><span style="color:#ff6600;"> $False</span> <span style="color:#000080;">-ExtensionCustomAttribute1</span> <span style="color:#ff6600;">$null</span></span></strong></pre>
<p>Users who try to send email to the DG will get an NDR indicating they&#39;ll need to email the admin to get access. &nbsp;In this scenario, that&#39;s exactly what you want. &nbsp;In general we&#39;re keeping these around to see how much they&#39;re being used before deleting them, so this is perfect!</p>
<p>Exchange in the cloud is flexible, but sometimes there are some concessions to be made due to the difference in architecture. &nbsp;This workaround isn&#39;t <i>quite&nbsp;</i>as straightforward as Disable-DistributionGroup, but it comes pretty close.</p>]]></content:encoded>
    </item>
    <item>
      <title>The One With The FBA Redirect Loop</title>
      <link>https://docs.microsoft.com/archive/blogs/jasonsla/the-one-with-the-fba-redirect-loop</link>
      <pubDate>Thu, 15 Jan 2015 08:36:00 GMT</pubDate>
      <dc:creator><![CDATA[JasonSla - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/jasonsla/2015/01/15/the-one-with-the-fba-redirect-loop/</guid>
      <description><![CDATA[Applies to: Exchange 2013
Recently I came across a few cases where all users logging into OWA and...]]></description>
      <content:encoded><![CDATA[<p class="caption"><strong>Applies to:</strong> Exchange 2013</p>
<p>Recently I came across a few cases where all users logging into OWA and ECP would be perpetually redirected back to the FBA logon page. &nbsp;The customer had just replaced their old certificate with a new one, from a supported 3rd-party vendor, and the certificate seemed to check out, having a trusted chain, accessible CRLs, etc.&nbsp; (<a class="caption" href="#TLDR">TLDR</a>)</p>
<h2>Setup:</h2>
<ul>
<li>Exchange 2013 CAS</li>
<li>Forms-based authentication (FBA) enabled</li>
</ul>
<h2>Symptom:</h2>
<ol>
<li>Log on to OWA or ECP by browsing to the site which will redirect you (302) to the FBA page</li>
<li>Enter the credentials as you normally would and submit the form</li>
<li>Get redirected back to /owa without an error message or an event being thrown</li>
</ol>
<h4><strong>Sample Log</strong></h4>
<p>Digging into the logs, we see a distinct pattern.&nbsp; First up, the IIS log:</p>
<pre class="log">#Software: Microsoft Internet Information Services 8.5
#Version: 1.0
#Date: 2015-01-14 18:39:49
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) cs(Referer) sc-status sc-substatus sc-win32-status time-taken
2015-01-14 18:39:49 192.168.137.113 GET /owa &amp;CorrelationID=;&amp;cafeReqId=78641dc0-8e3c-47b5-a4bc-30e1d7d91546; 443 - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) - 302 0 0 8514
2015-01-14 18:39:50 192.168.137.113 GET /owa/auth/logon.aspx url=https%3a%2f%2fmail.contoso.com%2fowa&amp;reason=0&amp;CorrelationID=;&amp;cafeReqId=9a5cb876-58cf-4f35-9ccb-bf06b0980656; 443 - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) - 200 0 0 1343
2015-01-14 18:39:51 192.168.137.113 GET /owa/auth/logon.aspx replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa&amp;CorrelationID=;&amp;cafeReqId=cdec7c7e-e80e-4218-b295-f2e623d8bf24; 443 - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) https://mail.contoso.com/owa/auth/logon.aspx?url=https%3a%2f%2fmail.contoso.com%2fowa&amp;reason=0 200 0 0 1156
2015-01-14 18:40:02 192.168.137.113 POST /owa/auth.owa &amp;CorrelationID=;&amp;cafeReqId=55c7a045-aad3-4fa3-a345-3fab3436da17; 443 contoso\jason 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) https://mail.contoso.com/owa/auth/logon.aspx?replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa 302 0 0 1688
2015-01-14 18:40:02 192.168.137.113 GET /owa &amp;CorrelationID=;&amp;cafeReqId=6afdd6df-f2ed-4c04-9bc1-ae870305f0b5; 443 - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) https://mail.contoso.com/owa/auth/logon.aspx?replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa 302 0 0 62
2015-01-14 18:40:02 192.168.137.113 GET /owa/auth/logon.aspx url=https%3a%2f%2fmail.contoso.com%2fowa&amp;reason=0&amp;CorrelationID=;&amp;cafeReqId=ebc7e50b-e71a-43bd-84a7-40e6f70fb2a3; 443 - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) https://mail.contoso.com/owa/auth/logon.aspx?replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa 200 0 0 390
2015-01-14 18:40:02 192.168.137.113 GET /owa/auth/logon.aspx replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa&amp;CorrelationID=;&amp;cafeReqId=97fc51f2-b4d6-4dfb-bfc4-6692260543e4; 443 - 127.0.0.1 Mozilla/5.0+(Windows+NT+6.3;+WOW64) https://mail.contoso.com/owa/auth/logon.aspx?url=https%3a%2f%2fmail.contoso.com%2fowa&amp;reason=0 200 0 0 140
</pre>
<p>There are a few things that are really important here: the URI, the HTTP VERB used, and the response code.&nbsp; When we remove the noise and focus on those, we get this pattern:</p>
<ol class="mono">
<li>GET,&nbsp;&nbsp;/owa,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;302</li>
<li>GET,&nbsp;&nbsp;/owa/auth/logon.aspx,&nbsp;200</li>
<li>GET,&nbsp;&nbsp;/owa/auth/logon.aspx,&nbsp;200</li>
<li>POST,&nbsp;/owa/auth.owa,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;302</li>
<li>GET,&nbsp;&nbsp;/owa,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;302 (starts repeating with step 2)</li>
</ol>
<p>To get an idea of what&#39;s happening here, we need to understand how the FBA logon works.&nbsp; In a nutshell, this is what&#39;s <em>supposed </em>to happen:</p>
<ol>
<li>A user browses to the OWA page, in general that&#39;s &quot;/owa&quot;.</li>
<li>OWA needs to authenticate the user, so it redirects the browser to /owa/auth/logon.aspx.</li>
<li>Logon.aspx is the FBA page.&nbsp; The form POSTs the user name and password to &quot;/owa/auth.owa&quot;.</li>
<li>As part of the FBA model, we store an encrypted cookie with a short TTL in the browser, and redirect the browser to /owa.</li>
<li>OWA allows the user to complete the login, and displays the user&#39;s mailbox.</li>
</ol>
<p>In the customer&#39;s environment, the process breaks down on step 5.&nbsp; Instead of allowing the login, we&#39;re just redirected to the FBA again. <br /> <br /> Unfortunately there&#39;s no clear indication of what&#39;s happening in the event or IIS logs.&nbsp; The only real clue is in the HttpProxy\Owa log:</p>
<pre class="log">#Software: Microsoft Exchange Server
#Version: 15.00.0995.012
#Log-type: HttpProxy Logs
#Date: 2015-01-14T18:39:49.098Z
#Fields: DateTime,RequestId,MajorVersion,MinorVersion,BuildVersion,RevisionVersion,ClientRequestId,Protocol,UrlHost,UrlStem,ProtocolAction,AuthenticationType,IsAuthenticated,AuthenticatedUser,Organization,AnchorMailbox,UserAgent,ClientIpAddress,ServerHostName,HttpStatus,BackEndStatus,ErrorCode,Method,ProxyAction,TargetServer,TargetServerVersion,RoutingType,RoutingHint,BackEndCookie,ServerLocatorHost,ServerLocatorLatency,RequestBytes,ResponseBytes,TargetOutstandingRequests,AuthModulePerfContext,HttpPipelineLatency,CalculateTargetBackEndLatency,GlsLatencyBreakup,TotalGlsLatency,AccountForestLatencyBreakup,TotalAccountForestLatency,ResourceForestLatencyBreakup,TotalResourceForestLatency,ADLatency,SharedCacheLatencyBreakup,TotalSharedCacheLatency,ActivityContextLifeTime,ModuleToHandlerSwitchingLatency,ClientReqStreamLatency,BackendReqInitLatency,BackendReqStreamLatency,BackendProcessingLatency,BackendRespInitLatency,BackendRespStreamLatency,ClientRespStreamLatency,KerberosAuthHeaderLatency,HandlerCompletionLatency,RequestHandlerLatency,HandlerToModuleSwitchingLatency,ProxyTime,CoreLatency,RoutingLatency,HttpProxyOverhead,TotalRequestTime,UrlQuery,BackEndGenericInfo,GenericInfo,GenericErrors
2015-01-14T18:39:49.082Z,78641dc0-8e3c-47b5-a4bc-30e1d7d91546,15,0,995,12,,Owa,mail.contoso.com,/owa,,FBA,False,,,,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,302,,,GET,,,,,,,,,0,,,,,,,,,,,,,,,531.2234,,,,,,,,,,,,,,616,,616,618,,,BeginRequest=2015-01-14T18:39:48.551Z;CorrelationID=;OnAuthenticate=259;NoCookies=302 - GET/E14AuthPost;EndRequest=2015-01-14T18:39:49.082Z;,
2015-01-14T18:39:50.473Z,9a5cb876-58cf-4f35-9ccb-bf06b0980656,15,0,995,12,,Owa,mail.contoso.com,/owa/auth/logon.aspx,,FBA,False,,,,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,200,,,GET,,,,,,,,,0,,,,152,,,,,,,,,,,1234.2881,,,,,,,,,,,,,,1077,,1229,1229,?url=https%3a%2f%2fmail.contoso.com%2fowa&amp;reason=0,,BeginRequest=2015-01-14T18:39:49.239Z;CorrelationID=;OnAuthenticate=108;SelectHandler=151;EndRequest=2015-01-14T18:39:50.473Z;,
2015-01-14T18:39:51.676Z,cdec7c7e-e80e-4218-b295-f2e623d8bf24,15,0,995,12,,Owa,mail.contoso.com,/owa/auth/logon.aspx,,FBA,False,,,,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,200,,,GET,,,,,,,,,0,,,,0,,,,,,,,,,,1047.0835,,,,,,,,,,,,,,1055,,1055,1055,?replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa,,BeginRequest=2015-01-14T18:39:50.629Z;CorrelationID=;EndRequest=2015-01-14T18:39:51.676Z;I32:ATE.C[CONTOSERVER.contoso.com]=2;F:ATE.AL[CONTOSERVER.contoso.com]=16;I32:ADS.C[CONTOSERVER]=1;F:ADS.AL[CONTOSERVER]=3.2332;I32:ADR.C[CONTOSERVER]=1;F:ADR.AL[CONTOSERVER]=5.214,
<span style="background-color:lightblue;">2015-01-14T18:40:02.839Z,55c7a045-aad3-4fa3-a345-3fab3436da17,15,0,995,12,,Owa,mail.contoso.com,<span style="background-color:yellow;">/owa/auth.owa,,FBA,True,contoso\jason</span>,,Sid~S-1-5-12-3456789012-3456789012-3456789012-3456,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,302,,,POST,,,,,WindowsIdentity,,CONTOSERVER,78,145,,,,892,629,,0,90;,90,7;11;,18,108,,0,1656.8489,36,,,,,,,,,101,727,0,,763,,1655,1655,,,BeginRequest=2015-01-14T18:40:01.182Z;CorrelationID=;OnAuthenticate=155;ProxyState-Run=None;ServerLocatorCall=47e9ec43-db6e-4278-b364-1d3049692e7a;FEAuth=BEVersion-1941996515;ProxyState-Complete=CalculateBackEnd;EndRequest=2015-01-14T18:40:02.839Z;I32:ATE.C[CONTOSERVER.contoso.com]=4;F:ATE.AL[CONTOSERVER.contoso.com]=11.75;I32:ADS.C[CONTOSERVER]=4;F:ADS.AL[CONTOSERVER]=6.2329;I32:ADR.C[CONTOSERVER]=1;F:ADR.AL[CONTOSERVER]=1.0308,</span>
<span style="background-color:lightblue;">2015-01-14T18:40:02.902Z,6afdd6df-f2ed-4c04-9bc1-ae870305f0b5,15,0,995,12,,Owa,mail.contoso.com,/owa,,FBA,False,,,,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,302,,,GET,,,,,,,,,0,,,,,,,,,,,,,,,31.26,,,,,,,,,,,,,,27,,27,27,,,BeginRequest=2015-01-14T18:40:02.870Z;CorrelationID=;<span style="background-color:yellow;">NoCookies=302</span> - GET/E14AuthPost;EndRequest=2015-01-14T18:40:02.902Z;,</span>
2015-01-14T18:40:02.933Z,ebc7e50b-e71a-43bd-84a7-40e6f70fb2a3,15,0,995,12,,Owa,mail.contoso.com,/owa/auth/logon.aspx,,FBA,False,,,,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,200,,,GET,,,,,,,,,0,,,,0,,,,,,,,,,,0,,,,,,,,,,,,,,1,,1,1,?url=https%3a%2f%2fmail.contoso.com%2fowa&amp;reason=0,,BeginRequest=2015-01-14T18:40:02.933Z;CorrelationID=;EndRequest=2015-01-14T18:40:02.933Z;,
2015-01-14T18:40:03.371Z,97fc51f2-b4d6-4dfb-bfc4-6692260543e4,15,0,995,12,,Owa,mail.contoso.com,/owa/auth/logon.aspx,,FBA,False,,,,Mozilla/5.0 (Windows NT 6.3; WOW64),127.0.0.1,CONTOSERVER,200,,,GET,,,,,,,,,0,,,,0,,,,,,,,,,,0,,,,,,,,,,,,,,2,,2,2,?replaceCurrent=1&amp;url=https%3a%2f%2fmail.contoso.com%2fowa,,BeginRequest=2015-01-14T18:40:03.371Z;CorrelationID=;EndRequest=2015-01-14T18:40:03.371Z;,
</pre>
<p>The lines highlighted in blue correspond with lines 4 and 5 above -- the POST to auth.owa and subsequent GET of /owa.&nbsp; Notice that a username (contoso\jason) appears here, indicating successful authentication.&nbsp; A bad auth attempt would result in a 401 or 403.&nbsp; The next line doesn&#39;t show a user, and also shows NoCookies=302. <br /><br /> That pattern indicates we authenticated successfully, but then for some reason didn&#39;t have the expected cookie when coming back to /owa.&nbsp; So what happened? <br /><br /> It turns out the cookie we set earlier in step 4 fails to decrypt, and we send the user back to the FBA page to try again.&nbsp; There aren&#39;t a lot of scenarios where we should fail to decrypt a legitimate cookie, so let&#39;s look at the cert, which is what we use to encrypt/decrypt the cookie data.&nbsp; Remember, the customer just changed the cert, so we knew it was more than likely related, but standard cert checks succeeded. <br /><br /> We used <a href="/b/pki/archive/2006/11/30/basic-crl-checking-with-certutil.aspx">certutil</a>&nbsp; to verify most of this:</p>
<ul>
<li>Certificate chain is valid, up to the CA root</li>
<li>The current date was within the certificate&#39;s validity period</li>
<li>CRL, AIA, and OCSP checks were successful</li>
<li>The names on the certificate (subject name, alternative names) matched the URL we were browsing</li>
</ul>
<p><a name="TLDR"></a>That&#39;s the standard list of things I check when running into your run-of-the-mill certificate issues, but since they checked out, I just dumped the cert for an eyeball test (grab the serial number from Get-ExchangeCertificate or the cert itself, no spaces):</p>
<p class="mono">certutil -store my <em>certificateSerialNumber</em></p>
<p>The provider was listed as &quot;Provider = Microsoft Software Key Storage Provider&quot;.&nbsp; The KSP is a provider that is used with Cryptography API: Next Generation (CNG).&nbsp; <strong>Exchange FBA does not support CNG certificates</strong>.&nbsp; Exchange only uses and supports the legacy CryptoAPI which uses Cryptographic Service Providers (CSP).</p>
<h2>Solution</h2>
<p>Migrate the certificate to a CSP or request a CSP certificate from your certificate provider.&nbsp; If you use a CSP or KSP from another software or hardware vendor, contact the relevant vendor for the equivalent instructions.&nbsp; For example this will be the case if you use a Microsoft RSA SChannel Cryptographic Provider and the certificate is not locked into a KSP:</p>
<ol>
<li>Backup your existing certificate, including the private key.&nbsp; For more information on how to do this, please reference the <a href="https://technet.microsoft.com/en-us/library/aa996305.aspx">Export-ExchangeCertificate</a> cmdlet.</li>
<li>Note which services are bound to the certificate currently using Get-ExchangeCertificate.</li>
<li>Delete the certificate and private key.&nbsp; If you use Remove-ExchangeCertificate, you&#39;ll need to temporarily assign a different certificate to the bound services first.&nbsp; If you just use PowerShell or MMC you&#39;ll need to reboot the server afterwards as bound services cache the certificate.</li>
<li>Import the new certificate into a CSP using certutil (pfx/p12): <br /><br /> <span class="mono">certutil -csp &quot;Microsoft RSA SChannel Cryptographic Provider&quot; -importpfx &lt;CertificateFilename&gt;<br /><br /></span></li>
<li>Ensure the certificate is still bound to the same services using Get-ExchangeCertificate, and if not, re-set them using Enable-ExchangeCertificate.</li>
<li>Restart the server (see step 3).</li>
</ol>
<p>Verify the certificate now has its private key stored with a CSP: <br /><br /> <span class="mono">certutil -store my &lt;CertificateSerialNumber&gt;</span> <br /> The output should now show: &quot;Provider = Microsoft RSA SChannel Cryptographic Provider&quot;</p>
<p><span class="author">Jason Slaughter</span></p>]]></content:encoded>
    </item>
    <item>
      <title>Exchange ActiveSync Mailbox Logging</title>
      <link>https://docs.microsoft.com/archive/blogs/jasonsla/exchange-activesync-mailbox-logging</link>
      <pubDate>Tue, 19 Mar 2013 13:27:00 GMT</pubDate>
      <dc:creator><![CDATA[JasonSla - MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/jasonsla/2013/03/19/exchange-activesync-mailbox-logging/</guid>
      <description><![CDATA[Applies to: Exchange 2007, 2010, 2013, 2016, Office 365

Exchange ActiveSync (EAS) mailbox logs...]]></description>
      <content:encoded><![CDATA[<span style="font-size: small"><span class="caption"><strong>Applies to:</strong> Exchange 2007, 2010, 2013, 2016, Office 365</span></span>

Exchange ActiveSync (EAS) mailbox logs are protocol-level logs that show the traffic between Exchange and the EAS device.  This is assuming of course, that the device actually connects, gets past IIS, and into Exchange code.  When troubleshooting EAS issues, this is often the most useful piece of information.  Gathering these logs can be quick if you use PowerShell to do so, versus gathering them via ECP.
<h2>PowerShell Method</h2>
Enable the logging on the affected mailbox:
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">Set-CASMailbox</span> <span style="color: #800080"><em>alias </em></span><span style="color: #000080">-ActiveSyncDebugLogging:</span><span style="color: #ff6600">$true</span></span></p>

<div class="alert">

<strong>Note:</strong> Get-CASMailbox will not show whether ActiveSyncDebugLogging is on or off unless you add the <em>-ActiveSyncDebugLogging</em> parameter.

</div>
Reproduce whatever issue you're dealing with, then gather the logs:
<h4>Exchange 2007/2010</h4>
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">Get-ActiveSyncDeviceStatistics</span> <span style="color: #000080">-Mailbox</span> <span style="color: #800080"><em>alias </em></span><span style="color: #000080">-GetMailboxLog:</span><span style="color: #ff6600">$true</span> <span style="color: #000080">-NotificationEmailAddress</span> <span style="color: #800080"><em>yourEmailAddress@contoso.com</em></span></span></p>

<h4>Exchange 2013+</h4>
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">Get-MobileDeviceStatistics</span> <span style="color: #000080">-Mailbox</span> <span style="color: #800080"><em>alias </em></span><span style="color: #000080">-GetMailboxLog:</span><span style="color: #ff6600">$true</span> <span style="color: #000080">-NotificationEmailAddresses</span> <span style="color: #800080"><em>yourEmailAddress@contoso.com</em></span></span></p>
This will output the log to the screen (in 2010 and above), and email a copy of it to your email.  Easy!

Note that these cmdlets will work in all versions of Exchange from 2007-2016, however in 2013 we've deprecated Get-ActiveSyncDeviceStatistics in favor of Get-MobileDeviceStatistics, and in 2007 the cmdlets don't actually do anything (see the Exchange 2007 note below).  The cmdlet is otherwise the same.

By default, these logs will contain tags that are truncated -- the data for most tags is removed, and replaced with a tag attribute indicating how many bytes the data contains.  For example, the subject of an email may look like this:
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Subject </span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=</span>"<span style="color: #0000ff">Email:</span>" <span style="color: #ff0000">bytes</span><span style="color: #0000ff">=</span>"<span style="color: #0000ff">19</span>"<span style="color: #0000ff">/&gt;</span></span></p>
...instead of this:
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">&lt;</span><span style="color: #800000">Subject </span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">=</span>"<span style="color: #0000ff">Email:</span>"<span style="color: #0000ff">&gt;</span>This is the subject<span style="color: #0000ff">&lt;/</span><span style="color: #800000">Subject</span><span style="color: #0000ff">&gt;</span></span></p>
If the actual data is required, then enable verbose logging on each CAS the request may hit.  To do so, open the <em>x:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Sync\web.config</em> file (replacing <em>V14</em> with <em>V15</em> in 2013+), and find this tag:
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">&lt;</span><span style="color: #800000">add </span><span style="color: #ff0000">key</span>="<span style="color: #0000ff">EnableMailboxLoggingVerboseMode</span>" <span style="color: #ff0000">value</span>="<em><span style="color: #0000ff">false</span></em>"<span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">add</span><span style="color: #0000ff">&gt;</span></span></p>
Change that value to <strong>true</strong>.  Note that this setting is <strong>per-CAS</strong> and not per-user, so the verbosity will be dependent on which CAS the device hits.  No restart is required of IIS or the application pool.  Also note that <strong>Office 365</strong> does not allow verbose logging, so you're stuck with using Fiddler (with the <a href="https://easinspectorforfiddler.codeplex.com/">EAS Inspector for Fiddler</a>) or working with the truncated data.
<h4>Exchange 2007</h4>
In Exchange 2007, the EAS logs are enabled per-server.  To enable EAS logging, open the <em>x:\Program Files\Microsoft\Exchange Server\ClientAccess\Sync\web.config</em> file, and find this tag:
<p style="padding-left: 30px"><span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">&lt;</span><span style="color: #800000">add </span><span style="color: #ff0000">key</span>="<span style="color: #0000ff">MailboxLoggingEnabled</span>" <span style="color: #ff0000">value</span>="<em><span style="color: #0000ff">false</span></em>"<span style="color: #0000ff">&gt;&lt;/</span><span style="color: #800000">add</span><span style="color: #0000ff">&gt;</span></span></p>
Change that value to <strong>true</strong>.  Note that this setting is also per-CAS, so the traffic will only be logged if the device hits a CAS with this enabled.  Other than this setting, the rest of the steps are the same as Exchange 2010-current.
<h2>OWA / ECP Method</h2>
This method allows end-users to easily gather their own logs through OWA -&gt; ECP.  Simply log into ECP and go to Options -&gt; Phone -&gt; Mobile Phones/Devices.  This slab contains a list of the EAS devices for the mailbox, and users can enable logging and retrieve it from here. The log will be sent to the user’s mailbox.

[caption id="attachment_205" align="alignnone" width="437"]<a href="https://msdnshared.blob.core.windows.net/media/2013/03/Devices2013.png"><img src="https://msdnshared.blob.core.windows.net/media/2013/03/Devices2013.png" alt="Mobile devices slab in Exchange 2013" width="437" height="379" class="imgSimpleBorder wp-image-205 size-full" /></a> Mobile devices slab in Exchange 2013[/caption]

&nbsp;

[caption id="attachment_215" align="alignnone" width="412"]<a href="https://msdnshared.blob.core.windows.net/media/2013/03/DevicesO365.png"><img src="https://msdnshared.blob.core.windows.net/media/2013/03/DevicesO365.png" alt="Mobile devices slab in Office 365" width="412" height="343" class="imgSimpleBorder wp-image-215 size-full" /></a> Mobile devices slab in Office 365[/caption]

&nbsp;

In any of the versions, select the device you want logging for, and click the "Start Logging" icon (highlighted in yellow).  After enabling the logging, reproduce the behavior and then click "Retrieve Log" which will be the same button.

Whether you use PowerShell or ECP to enable logging, the log is sent to you in an email message that has the log attached.  After 72 hours this logging is automatically disabled, so keep that in mind if you're trying to capture logs over a long period of time.  These logs are not intended to stay enabled very long.
<h2>The Exchange ActiveSync Protocol</h2>
The Exchange ActiveSync protocol is well documented, yet can be difficult to read and understand.  It’s broken up into numerous specifications, which are all listed in the <a href="https://msdn.microsoft.com/en-us/library/cc425499.aspx" title="Exchange Server Protocol Docs">Exchange Server Protocol Docs</a>.

The main specifications you’ll likely use on a regular basis are for the contact, calendar, and commands.  All the docs for ActiveSync start with MS-AS, such as MS-ASCNTC (Contact Class), MS-ASCAL (Calendar Class), and MS-ASCMD (Command Reference).

Understanding these logs may require extensive protocol review, but some will be fairly straightforward.  <em>SendMail</em> for example will send an email, with tags such as <span style="color: #0000ff">&lt;</span><span style="color: #800000">Subject</span><span style="color: #0000ff">&gt;</span> etc.
<h4>Sample Log</h4>
Here is a snippet from a sample log showing the <em>MeetingResponse</em> command.  For this sample, the EAS command <a href="https://msdn.microsoft.com/en-us/library/ee158682.aspx">MeetingResponse</a> should be reviewed.  The full command reference can be found in the MS-ASCMD reference under Messages -&gt; Message Syntax -&gt; <a href="https://msdn.microsoft.com/en-us/library/ee202197.aspx">Commands</a>.
<pre class="log">-----------------
 Log Entry: 325
-----------------

RequestTime : 
02/28/2013 17:23:23

ServerName : 
CONTOSO-E2K10

AssemblyVersion : 
14.02.0247.001

Identifier : 
114A6C98

RequestHeader : 
POST /Microsoft-Server-ActiveSync/default.eas?User=user@contoso.com&amp;DeviceId=DMPFXZABDFHW&amp;DeviceType=WindowsMail&amp;Cmd=MeetingResponse HTTP/1.1
Connection: keep-alive
Content-Length: 29
Content-Type: application/vnd.ms-sync.wbxml
Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-us
Authorization: ********
Host: mail.contoso.com
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Win64; x64; Trident/6.0)
X-MS-PolicyKey: 196647767
MS-ASProtocolVersion: 14.2


RequestBody : 
&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;MeetingResponse xmlns="MeetingResponse:"&gt;
    &lt;Request&gt;
        &lt;UserResponse&gt;1&lt;/UserResponse&gt;
        &lt;CollectionId&gt;1&lt;/CollectionId&gt;
        &lt;RequestId&gt;1:653&lt;/RequestId&gt;
    &lt;/Request&gt;
&lt;/MeetingResponse&gt;

AccessState : 
Allowed

AccessStateReason : 
Global

ResponseHeader : 
HTTP/1.1 200 OK
MS-Server-ActiveSync: 14.2


ResponseBody : 
&lt;?xml version="1.0" encoding="utf-8" ?&gt;
&lt;MeetingResponse xmlns="MeetingResponse:"&gt;
    &lt;Result&gt;
        &lt;RequestId&gt;1:653&lt;/RequestId&gt;
        &lt;Status&gt;1&lt;/Status&gt;
        &lt;CalId&gt;1:654&lt;/CalId&gt;
    &lt;/Result&gt;
&lt;/MeetingResponse&gt;

ResponseTime : 
02/28/2013 17:23:23</pre>
<h4>Log Breakdown</h4>
Let's break down the log starting from the top.
<div class="datagrid">
<table>
<tbody>
<tr>
<td><strong>Log Entry</strong></td>
<td>This is a sequential entry number, starting at 0.</td>
</tr>
<tr class="alt">
<td><strong>RequestTime</strong></td>
<td>This is the time the request entered Exchange code, and is in the server’s time zone.</td>
</tr>
<tr>
<td><strong>ServerName</strong></td>
<td>This is the CAS that is ultimately processing the request.</td>
</tr>
<tr class="alt">
<td><strong>AssemblyVersion</strong></td>
<td>The version of the AirSync assembly that the AirSyncHandler in IIS calls into. Specifically, <em>x:\Program Files\Microsoft\Exchange Server\V14\ClientAccess\Sync\Bin\AirFilter.dll</em></td>
</tr>
<tr>
<td><strong>Identifier</strong></td>
<td>A unique hexadecimal number identifying the specific request/response pair.</td>
</tr>
<tr class="alt">
<td><strong>RequestHeader</strong></td>
<td>This is the full HTTP header with redacted auth. This will show if the connection is being proxied, etc.</td>
</tr>
<tr>
<td><strong>RequestBody</strong></td>
<td>This is the decoded WBXML sent from the EAS device. Consider this the raw request from the client.</td>
</tr>
<tr class="alt">
<td><strong>LogicalRequest</strong></td>
<td>The parsed, complete XML request. This includes some optional elements that are not required, and show the default or implied settings.</td>
</tr>
<tr>
<td><strong>AccessState</strong></td>
<td>The access state for this specific device. Allowed, Blocked, etc.</td>
</tr>
<tr class="alt">
<td><strong>AccessStateReason</strong></td>
<td>The reason for the access state above. Global, Individual, etc.</td>
</tr>
<tr>
<td><strong>ResponseHeader</strong></td>
<td>The HTTP header sent by Exchange. This is pre-IIS, and IIS may add its own headers before sending the set to the client.</td>
</tr>
<tr class="alt">
<td><strong>ResponseBody</strong></td>
<td>The XML response to be sent to the device. This will be compressed into WBXML before hitting IIS.</td>
</tr>
<tr>
<td><strong>ResponseTime</strong></td>
<td>The time the response exited Exchange code and was sent to IIS.</td>
</tr>
</tbody>
</table>
</div>
&nbsp;

I’m going to jump down to the RequestBody, since the RequestHeader is mostly just HTTP information – the HTTP verb used, the user-agent, etc. The only lines that are normally important here are the X-MS-PolicyKey and User-Agent headers. Most everything else is going to be edge-case.

The RequestBody:
<pre class="log">RequestBody : 
<span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="utf-8"</span> ?<span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">MeetingResponse</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="MeetingResponse:"</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">Request</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">UserResponse</span><span style="color: #0000ff">&gt;</span>1<span style="color: #0000ff">&lt;/</span><span style="color: #800000">UserResponse</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">CollectionId</span><span style="color: #0000ff">&gt;</span>1<span style="color: #0000ff">&lt;/</span><span style="color: #800000">CollectionId</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">RequestId</span><span style="color: #0000ff">&gt;</span>1:653<span style="color: #0000ff">&lt;/</span><span style="color: #800000">RequestId</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Request</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">MeetingResponse</span><span style="color: #0000ff">&gt;</span>
</pre>
Ignore <span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span><span style="color: #0000ff">&gt;</span></span>, that's the XML header.  The next tag is <span style="font-family: courier new,courier;font-size: small"><span style="color: #0000ff">&lt;</span><span style="color: #800000">MeetingResponse </span><span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="MeetingResponse:"&gt;</span></span>, which we'll cross-reference with the protocol.  This is where I find many people hit a wall.
<div class="alert">

<strong>Note:</strong> You can mostly ignore the xmlns.  The <em>xmlns</em> is the XML namespace, which at a high level specifies the specific type of MeetingResponse, and is defined in the <em><a href="https://msdn.microsoft.com/en-us/library/ee179070.aspx">schema</a></em>, which is also in the protocol documentation.

</div>
Start at the MeetingResponse command itself. From there, we’ll drill down into the element we care about.

MeetingResponse -&gt; MeetingResponse element -&gt; Request element. Notice there is the Request and the Response. Now we see the “meat” of the request. The Child elements column here lists the elements with the data we care about based on the request we see in the log. UserResponse, CollectionId, and RequestId are all here.

<strong>UserResponse</strong> – 3 possible values, indicating whether the meeting is being accepted, tentatively accepted, or declined. This request has a UserResponse of 1, meaning the meeting request was <em>Accepted</em>.

<strong>CollectionId</strong> – String value specifying the folder that contains the meeting request. This value is obtained from a previous FolderSync (or FolderCreate) command response. If you miss those commands, you’ll have to make assumptions on what folder it’s referencing, but if you have access to the mailbox you can determine the mapping through a process detailed in a <a href="/b/tips_from_the_inside/archive/2013/06/17/activesync-mapping-a-collection-id-to-a-mailbox-folder.aspx">blog posting by Jim Martin</a>.

The first FolderSync for the device will pull a folder list that is alphabetized, and the CollectionId is sequential. So for example, in a new mailbox, Calendar would be CollectionId 1, Contacts would be CollectionId 2, and so on.

If the folders change after the FolderSync, the change to the FolderHierarchy is sent to the device, but the CollectionId just increments the number. So the newest folder gets the largest number. If the device partnership is reset, then the newest folder gets a CollectionId that is in the proper alphabetical order.

<strong>RequestId</strong> – String value specifying the server ID of the meeting request message item. Notice the format here is colon-separated. <em>FolderId</em>:<em>ItemId</em>:<em>AttachmentId</em>. In this case the CollectionId is 1, so the RequestId is 1:653.

The ItemId here acts much like the CollectionId above. The number increments in the partnership, but on a new sync, the items will all be in sequential order. Unlike the FolderHierarchy, these items are not alphabetized, but in chronological order. The first item in the box (oldest) will be ItemId 1.
<div class="alert">

<strong>Note:</strong> ServerId, RequestId, and CalendarId (CalId in the log) are all specifying the server ID of the items.  For some commands such as Sync, FolderSync, etc you'll see ServerId instead of the latter two, and its meaning may differ depending on its context.

See <a href="https://msdn.microsoft.com/en-us/library/gg675600.aspx">[MS-ASCMD] 2.2.3.151 ServerId</a> for more details.

</div>
The server will process the request, and send the response as shown in the ResponseBody:
<pre class="log">ResponseBody : 
<span style="color: #0000ff">&lt;?</span><span style="color: #800000">xml</span> <span style="color: #ff0000">version</span><span style="color: #0000ff">="1.0"</span> <span style="color: #ff0000">encoding</span><span style="color: #0000ff">="utf-8"</span> ?<span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;</span><span style="color: #800000">MeetingResponse</span> <span style="color: #ff0000">xmlns</span><span style="color: #0000ff">="MeetingResponse:"</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;</span><span style="color: #800000">Result</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">RequestId</span><span style="color: #0000ff">&gt;</span>1:653<span style="color: #0000ff">&lt;/</span><span style="color: #800000">RequestId</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">Status</span><span style="color: #0000ff">&gt;</span>1<span style="color: #0000ff">&lt;/</span><span style="color: #800000">Status</span><span style="color: #0000ff">&gt;</span>
        <span style="color: #0000ff">&lt;</span><span style="color: #800000">CalId</span><span style="color: #0000ff">&gt;</span>1:654<span style="color: #0000ff">&lt;/</span><span style="color: #800000">CalId</span><span style="color: #0000ff">&gt;</span>
    <span style="color: #0000ff">&lt;/</span><span style="color: #800000">Result</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">MeetingResponse</span><span style="color: #0000ff">&gt;</span>
</pre>
Most of the outlining structure is the same, so start with the RequestId here. Starting at the MeetingResponse command again, drill down to MeetingResponse -&gt; MeetingResponse element -&gt; Result element. Now we see the RequestId, Status, and CalendarId sections.

<strong>RequestId</strong> – String value specifying the server ID of the meeting request message item. The Id is 1:653, corresponding to the RequestId in the request.

<strong>Status</strong> – 4 possible values, indicating the success or failure of the MeetingResponse command. In this example the status is a 1, meaning the request was successful.

<strong>CalendarId</strong> – String value specifying the server ID of the calendar item (instead of the message object associated with the calendar item). If the meeting request is accepted, the server ID of the calendar item is returned, and is the new server ID. If you were to follow the conversation you’d see the server delete the old ID (1:653) and send down the updated 1:654 item.

Every request command and response is analyzed in a similar manner. Cross-reference the XML with the protocol docs, and use the view on the device and OWA/Outlook to visually see what’s going on. You can also mix this with message tracking logs, IIS logs, and other tools and data that we’ll delve into later.

<span class="author">Jason Slaughter</span>]]></content:encoded>
    </item>
  </channel>
</rss>