<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">BradHugh&amp;#39;s WebLog</title><subtitle type="html" /><id>http://blogs.msdn.com/b/brad_hughes/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/brad_hughes/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2007-09-06T15:23:00Z</updated><entry><title>Internet Explorer 8 impacts OWA Load Balancing Scenarios</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2009/10/15/internet-explorer-8-impacts-owa-load-balancing-scenarios.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2009/10/15/internet-explorer-8-impacts-owa-load-balancing-scenarios.aspx</id><published>2009-10-15T17:09:21Z</published><updated>2009-10-15T17:09:21Z</updated><content type="html">&lt;p&gt;Recently we’ve had several issues reported regarding Internet Explorer 8 and Outlook Web Access load balancing scenarios.&lt;/p&gt;  &lt;p&gt;Here are the scenarios we’ve identified so far:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;DNS Round robin load balancing when DNS TTL expires &lt;/li&gt;    &lt;li&gt;DNS Round robin load balancing when outbound HTTP Proxy servers are used &lt;/li&gt;    &lt;li&gt;SSL Session-ID persistence with a hardware load balancer &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;The reason that each one of these scenarios occur is because of the new “LCIE” or “Tab Process” model in Internet Explorer 8.&amp;#160; Essentially Internet Explorer 8 can create new “tab processes” for new browser tabs or browser windows that are opened.&amp;#160; It doesn’t do this for every tab or window but uses an internal algorithm to determine whether or not it should spin up a new process.&amp;#160; &lt;/p&gt;  &lt;p&gt;For a detailed description of the new architecture, see the following two posts:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/ie/archive/2008/03/11/ie8-and-loosely-coupled-ie-lcie.aspx"&gt;IE8 and Loosely-Coupled IE (LCIE)&lt;/a&gt;     &lt;br /&gt;&lt;a href="http://blogs.msdn.com/askie/archive/2009/03/09/opening-a-new-tab-may-launch-a-new-process-with-internet-explorer-8-0.aspx"&gt;Opening a New Tab may launch a New Process with Internet Explorer 8.0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Due to the new architecture certain things such as kept-alive connections and SSL sessions are not shared between Tab Processes.&amp;#160; This plays an important role in the scenarios we have found.&amp;#160; &lt;/p&gt;  &lt;p&gt;In advance: Yes, I know it’s not called an “OWA Server” – I’m calling it that to make this work for Exchange 2003 or Exchange 2007.&lt;/p&gt;  &lt;p&gt;The design of Forms Based Authentication in Outlook Web Access is another contributing factor.&amp;#160; Forms based authentication works by the OWA server storing a cookie in the client browser for authentication.&amp;#160; This cookie contains the encrypted credentials of the user that the OWA server can translate into basic authentication credentials for IIS with each new request.&amp;#160; However this cookie is encrypted by a key that is maintained (and rotated) in memory only on the OWA server that set the cookie.&amp;#160; For instance if a client logs into Server A and receives a cookie from Server A, it cannot use that same cookie to authenticate to Server B because Server B does not have they key to decrypt the credentials.&amp;#160; If you do try to present a cookie from Server A to Server B, your browser will be redirected to the login page on Server B to provide valid authentication.&lt;/p&gt;  &lt;p&gt;That explanation given, here is a brief explanation of the behavior you may see in each scenario.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DNS Round robin load balancing when DNS TTL expires&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you use DNS round robin load balancing for Outlook Web Access, you may experience confusing client behavior when the DNS time to live values expires on the record.&amp;#160; The scenario usually manifests itself like this:&lt;/p&gt;  &lt;p&gt;You are logged into OWA (with forms authentication) when the DNS TTL expires.&amp;#160; If you continue to work within the main OWA window, you should be able to continue to work within the main OWA window, you should be able to continue to work and not be logged out.&amp;#160; This is because IE uses it’s kept-alive connections that are already established to the original OWA server.&amp;#160; However if you open a number of email messages in new windows (double-click mail messages), a new tab process for iexplore.exe will be created.&amp;#160; This new tab process will have to create a new TCP session that, when resolved by Winsock, returns the IP address of a different OWA server in the DNS round robin.&amp;#160; When this new window opens, you will be redirected to the forms authentication login page.&amp;#160; If you provide your credentials to the “new” server, you will in-turn get logged out of the “main” OWA window that still has a persistent connection to the “old” server. And the next time you spin up a new tab process, the experience starts over again.&amp;#160; &lt;/p&gt;  &lt;p&gt;So needless to say, it’s a confusing user experience and the only way to recover is to close all browser windows, restart IE and log back in to OWA.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;DNS Round robin load balancing when outbound HTTP Proxy servers are used&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you use DNS round robin load balancing for Outlook Web Access, you may experience being logged out randomly with Outlook Web Access.&amp;#160; This is really due to the same behavior as above except instead of the name resolution happening on the client, it happens on the proxy server.&amp;#160; Since proxy sessions are not maintained across tab processes, new outbound connections will also be established from the proxy server.&amp;#160; Since many users may be accessing the same DNS name through the same proxy server, the TTL expiration may seem completely random.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SSL Session-ID persistence with a hardware load balancer&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;If you are using SSL session-id based persistence on your hardware load balancer, you may experience the same behavior as above except in a more severe form.&amp;#160; In this situation the new connections that are established by the new tab process are routed to a different OWA server by the load balancer.&amp;#160; This will happen &lt;em&gt;every&lt;/em&gt; time a new tab process is spawned, not just at some arbitrary interval making this by far the worst of the experiences.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Workarounds and Solutions&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;We’ll start with the easy one: &lt;em&gt;SSL Session-ID persistence&lt;/em&gt;.&amp;#160; Because of issues (just like this) where the SSL session-id changes, SSL session-id based persistence is not (and has never been) a supported persistence method for load balancing Outlook Web Access.&amp;#160; In fact, there aren’t really any Exchange Services for which we support or recommend SSL session-id based persistence (&lt;strong&gt;Edit&lt;/strong&gt;: &lt;em&gt;Obviously for services that don’t require persistence at all such as ActiveSync and certain Outlook Anywhere configurations, you can use SSL-ID based persistence to keep the SSL handshakes to a minimum&lt;/em&gt;).&amp;#160; The supported persistence methods for Outlook Web Access are Client-IP based or Cookie-based persistence.&amp;#160; In certain situations where many clients are coming from the same IP (maybe a proxy server), cookie-based persistence is a much better solution than client-ip based persistence to get the load spread evenly.&amp;#160; Be aware that Outlook Web Access is the only Exchange web service that can use cookie-based persistence.&lt;/p&gt;  &lt;p&gt;For &lt;em&gt;DNS round-robin&lt;/em&gt; the answer is a bit more complicated.&amp;#160; We’ve never really &lt;em&gt;recommended&lt;/em&gt; DNS round robin for load balancing, but it technically &lt;em&gt;is&lt;/em&gt; supported.&amp;#160; Typically we just outline the caveats like the reliance on the client-side DNS resolver cache and the fact that it gives you zero redundancy in the case of a service failure.&amp;#160; However with all this guidance, many folks still see this as the poor man’s load balancer and implement it anyway.&amp;#160; If you are experiencing this issue, I strongly recommend you move to a real load balancing solution whether this is Windows NLB, the load balancing built-in to ISA Server 2006+, or a hardware-based load balancer.&amp;#160; If you can’t or won’t, this is something you’ll have to live with for now.&amp;#160; You can work around this issue by setting the TabProcGrowth registry value for the IE browser to 1 (It’s mentioned in the second of the earlier linked IE blogs).&amp;#160; However, this isn’t feasible in most situations because you have little control over the client-base.&lt;/p&gt;  &lt;p&gt;We are currently pursuing a design change request with the Internet Explorer team to see if we can make any of these experiences more consistent with the IE7 behavior.&amp;#160; However, since changes in this area can be very risky, we may have to live with this new behavior.&amp;#160; After all, it’s not a bug, it’s just an effect of the change in design for IE8.&lt;/p&gt;  &lt;p&gt;Thanks to everyone for reading, and special thanks to John Towler for reporting this.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9907756" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>Autodiscover and Client-only Sites (Revisited)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2008/05/20/autodiscover-and-client-only-sites-revisited.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2008/05/20/autodiscover-and-client-only-sites-revisited.aspx</id><published>2008-05-20T14:39:00Z</published><updated>2008-05-20T14:39:00Z</updated><content type="html">&lt;p&gt;Previously I had posted a problem regarding &lt;a href="http://blogs.msdn.com/brad_hughes/archive/2007/09/11/autodiscoversitescope-and-client-only-sites.aspx" target="_blank"&gt;Autodiscover site-scoping and client-only sites&lt;/a&gt;.&amp;nbsp; For sites that do not have Exchange Servers in them, the corresponding client sites must be added to the SCP object so that Outlook clients will discover the closest Client Access Servers for Autodiscover.&lt;/p&gt;
&lt;p&gt;I want to call out one issue I was informed about that one customer had run into (but most folks likely won't).&amp;nbsp; There actually is an upper-limit to the maximum number of values (or actually overall size) of a multi-valued attribute in Active Directory.&amp;nbsp; For these site values that limit typically exists somewhere between 800-900 entries.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The error returned is:&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #ff0000;"&gt;Set-ClientAccessServer : Active Directory operation failed on MICROSOF-D1CEB0.contoso.com. This error is not retriable. Additional information: The administrative limit for this request was exceeded. Active directory response: 00002024: SvcErr: DSID-02080490, problem 5008 (ADMIN_LIMIT_EXCEEDED)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In this case, the customer had multiple load-balanced CAS's in any given site.&amp;nbsp; He simply split up the assignment and put 400 Sites in one SCP and 400 Sites in the other.&amp;nbsp; It seems that this is likely the best workaround if you were to run into this.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;On another note, I found out something really cool you could do with Powershell today and wanted to update my previous script post so that it is 100% Powershell.&amp;nbsp; I was under the impression that you could not call Win32 API's from Powershell; while that is technically accurate, you can call Win32 API's from C# and you can call C# from Powershell so guess what you get?&amp;nbsp; Dynamically compiled C# code to call the Win32 API embedded in and invoked from a Powershell script!&lt;/p&gt;
&lt;p&gt;This is adapted from the following blog post: &lt;a href="http://blogs.msdn.com/powershell/archive/2006/04/25/583236.aspx" target="_blank"&gt;Powershell - PINVOKE or accessing WIN32 APIs&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The main script is identical to the script I previously posted.&amp;nbsp; However, this time instead of calling the command-line EXE, I call my .NET static method that I defined previously.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First: A Compile-CSharp function to do the on-the-fly compilation of my C# source code&lt;/p&gt;
&lt;p&gt;We create a new instance of the CSharp code provider to do the compilation.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$cp&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;"&gt;=&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: 10pt; color: cadetblue; line-height: 115%;"&gt;new-object&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 10pt; color: maroon; line-height: 115%;"&gt;Microsoft.CSharp.CSharpCodeProvider&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We then set our parameters for the compilation operation.&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: purple;"&gt;$cpar&lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;=&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: 10pt; color: cadetblue;"&gt;New-Object&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size: 10pt; color: maroon;"&gt;System.CodeDom.Compiler.CompilerParameters&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none;"&gt;&lt;span style="font-size: 10pt; color: purple;"&gt;$cpar&lt;/span&gt;&lt;span style="font-size: 10pt; color: black;"&gt;.GenerateInMemory &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;$true&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none;"&gt;&lt;span style="font-size: 10pt; color: purple;"&gt;$cpar&lt;/span&gt;&lt;span style="font-size: 10pt; color: black;"&gt;.GenerateExecutable &lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue;"&gt;$false&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$cpar&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;.OutputAssembly &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; line-height: 115%;"&gt;"custom"&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Then we compile the source.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$cr&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$cp&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;.CompileAssemblyFromSource(&lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$cpar&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;, &lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$code&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;&lt;span style="font-family: Trebuchet MS;"&gt;Second: Defining the C# code and calling the compilation function&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$siteCostCode&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: maroon; line-height: 115%;"&gt;@'&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: maroon; line-height: 115%;"&gt;&amp;lt;C# code here&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: maroon; line-height: 115%;"&gt;@'&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none;"&gt;&lt;span style="font-size: 10pt; color: green;"&gt;# Compile our C# code for doing the site cost calculations&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: cadetblue; line-height: 115%;"&gt;Compile-CSharp&lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$siteCostCode&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%; font-family: 'Courier New';"&gt;&lt;span style="font-family: Trebuchet MS;"&gt;Finally: Calling the managed static method defined in our C# Code&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: black;"&gt;[&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal;"&gt;int&lt;/span&gt;&lt;span style="font-size: 10pt; color: black;"&gt;[]] &lt;/span&gt;&lt;span style="font-size: 10pt; color: purple;"&gt;$costArray&lt;/span&gt;&lt;span style="font-size: 10pt; color: red;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: purple;"&gt;$null&lt;/span&gt;&lt;span style="font-size: 10pt; color: black;"&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$siteCostStatus&lt;/span&gt;&lt;span style="font-size: 10pt; color: red; line-height: 115%;"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt; [SiteCost.SiteCostLib]::QuerySitesByCost(&lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$clientsite&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;.Name, &lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$exchangeSites&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;, [&lt;/span&gt;&lt;span style="font-size: 10pt; color: teal; line-height: 115%;"&gt;ref&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;]&lt;/span&gt;&lt;span style="font-size: 10pt; color: purple; line-height: 115%;"&gt;$costArray&lt;/span&gt;&lt;span style="font-size: 10pt; color: black; line-height: 115%;"&gt;);&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;NOTE: At this time the download is not available.&amp;nbsp; I am trying to locate the script and will repost it if/when I can find it.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8522575" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>How NOT to Deploy Client Access Servers</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2008/05/05/how-not-to-deploy-client-access-servers.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2008/05/05/how-not-to-deploy-client-access-servers.aspx</id><published>2008-05-06T00:29:00Z</published><updated>2008-05-06T00:29:00Z</updated><content type="html">&lt;P&gt;I have obviously been really busy since December since that is the last time I posted a blog entry.&amp;nbsp; It's rather embarrassing, but I've been devoting a lot of my time to an Exchange Troubleshooting tool hopefully to be unveiled in the Exchange 14 timeframe - more to come later on this.&lt;/P&gt;
&lt;P&gt;In these 5 months, I've had plenty of time to see customers do some "interesting" things with the Client Access Server deployments.&amp;nbsp; Since many customers still&amp;nbsp;ignore our prescriptive guidance, I'm just going to give you the gun to shoot yourself in the foot.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Here are some things you can do so you can ensure you have fun-filled days, every day of the week, on the phone with Microsoft Exchange Support. &lt;/P&gt;
&lt;H2&gt;Deploy multiple Client Access Servers in the same AD Site with different configurations&lt;/H2&gt;
&lt;P&gt;Here are some common things that lead customers to do this:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Want different functions for Client Access Servers.&amp;nbsp; I.E. "This is my OWA / ActiveSync CAS, and this is my Autodiscover / EWS CAS", or "This is my Internal CAS, and this is my External CAS." &lt;/LI&gt;
&lt;LI&gt;Want the Client Access role on the mailbox server as a "backup" in case the CAS goes down. &lt;/LI&gt;
&lt;LI&gt;Have their "Test" or pre-production environment in the same AD-Site/Same Exchange Org as their Production environment. &lt;/LI&gt;&lt;/OL&gt;Exchange &lt;EM&gt;cannot&lt;/EM&gt; read your mind! 
&lt;P&gt;Don't assume that just because you have deemed CAS A as Internal and CAS B as External that Exchange will know the difference.&amp;nbsp; I will admit there are (most times) certain configurations changes that can make configurations like this work, but they are extremely complicated and prone to error.&amp;nbsp; All Client Access Servers in the same site should be configured the same way.&amp;nbsp; I make mention of this on my previous blog post, &lt;A href="http://blogs.msdn.com/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx" target=_blank mce_href="http://blogs.msdn.com/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx"&gt;CAS Load-Balancing Best Practices (Part 1)&lt;/A&gt;.&amp;nbsp; You will run into problems if you try this. There is no reason to try and split services as mentioned in reason 1 above. This was never tested and is not recommended. In general CAS Services scale well together and you should not try to isolate any particular service.&amp;nbsp; For #2 and #3 above, just remember, that Exchange and Outlook can't read your mind. As soon as a server is deemed a CAS (in AD), it is fair game for Outlook clients, proxy targets from other sites, etc, etc.&amp;nbsp; It is very difficult to understand and implement all the different factors that are considered when a client or a CAS in another site is choosing a CAS to connect to.&amp;nbsp; This will cause you issues; so just don't do it.&lt;/P&gt;
&lt;H2&gt;Deploy your Client Access Servers in a DMZ or Perimeter network, but "pretend" it's not a DMZ&lt;/H2&gt;
&lt;P&gt;We've seen customers again and again try and skirt our support stance on this.&amp;nbsp; Just in case you didn't know:&lt;/P&gt;
&lt;P&gt;Planning for Client Access Servers: &lt;A title=http://technet.microsoft.com/en-us/library/bb232184(EXCHG.80).aspx href="http://technet.microsoft.com/en-us/library/bb232184(EXCHG.80).aspx" mce_href="http://technet.microsoft.com/en-us/library/bb232184(EXCHG.80).aspx"&gt;http://technet.microsoft.com/en-us/library/bb232184(EXCHG.80).aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;Installation of a Client Access server in a perimeter network is not supported. The Client Access server must be a member of an Active Directory directory service domain, and the Client Access server machine account must be a member of the Exchange Servers Active Directory security group. This security group has read and write access to all Exchange servers within your organization. Communications between the Client Access server and the Mailbox servers within the organization occurs over RPC. It is because of these requirements that installing a Client Access server in a perimeter network is not supported. &lt;/EM&gt;&lt;/P&gt;
&lt;H3&gt;Don't pretend your DMZ/Perimeter network isn't a DMZ/Perimeter network&lt;/H3&gt;
&lt;P&gt;We've had numerous customers who want to argue about what is and is not a Perimeter network.&amp;nbsp; What was meant in the original documentation by "perimeter network" is any network that does not have unrestricted access to every Domain Controller and Exchange Server in the Organization.&amp;nbsp; We've had customer who have called it a "pocket-DMZ" meaning that it's not their main DMZ where there web servers are.&amp;nbsp; This DMZ sits off their internal network in a separate "pocket" where access to and from the internal network is restricted.&amp;nbsp; This is still a Perimeter network and falls into the above support policy.&amp;nbsp; If your CAS is NOT on your internal network, it's probably safe to assume that it's in a DMZ and likely not supported. &lt;/P&gt;
&lt;H3&gt;Not supported, means &lt;EM&gt;not&lt;/EM&gt; supported&lt;/H3&gt;
&lt;P&gt;If you call into PSS and the support engineer you are working with finds that your Client Access Server is in a restricted or perimeter network, you are deemed unsupported.&amp;nbsp; This does not mean that the PSS engineer hangs up the phone and says "too bad" right off the bat.&amp;nbsp; What this does mean is that the Engineer will gather logs and attempt to better understand your issue.&amp;nbsp; If at any point during troubleshooting, the PSS Engineer feels your issue may be caused by, or complicated by, the Client Access Server being in the perimeter, the engineer may request that troubleshooting be suspended until the Client Access Server in question be moved into the internal network.&amp;nbsp; If the customer is not willing to do this, then the customer is at that point unsupported by Microsoft PSS.&lt;/P&gt;
&lt;H3&gt;It's not even a good idea...&lt;/H3&gt;
&lt;P&gt;Our guidance recommends that an ISA Server or another reverse proxy server be placed in the DMZ to handle requests for Internet Exchange Services such as OWA and ActiveSync.&amp;nbsp; ISA 2004 and later allows ISA to operate in a Workgroup (non-domain) configuration and still pre-authenticate requests to Active Directory.&amp;nbsp; This ensures that no unauthenticated traffic is ever passed to the Client Access Servers and also ensures that every URL and request is processed and scanned by ISA URL Filtering/Scanning/and IDS feature-set.&amp;nbsp; This allows for a single port to be opened up (443) to each Client Access Server in the internal network (to allow ISA Web publishing) and is the most secure configuration by far.&lt;/P&gt;
&lt;P&gt;If an Exchange 2007 Client Access Server is deployed in the perimeter, a plethora of ports must be opened (both random and static) to Exchange mailbox servers, Domain Controllers, and other infrastructure roles such as DNS.&amp;nbsp; For an Exchange Mailbox Server, you must open Dynamic RPC ports 1024 and above, in addition to 135, 139, and 445 (standard Windows RPC and File sharing ports).&amp;nbsp; These ports essentially make your back firewall in the perimeter scenario into swiss cheese and is counter-productive to a secure environment.&lt;/P&gt;
&lt;H2&gt;All of the Above&lt;/H2&gt;
&lt;P&gt;A picture is worth a thousand words.&amp;nbsp; Names have been changed to protect the guilty.&lt;/P&gt;
&lt;P&gt;&lt;IMG style="WIDTH: 479px; HEIGHT: 258px" src="http://brad_hughes.members.winisp.net/hownottodeploycas/dontdothis.jpg" width=479 height=258 mce_src="http://brad_hughes.members.winisp.net/hownottodeploycas/dontdothis.jpg"&gt; &lt;/P&gt;
&lt;P&gt;This customer was doing all of the above.&amp;nbsp; The CAS was in a DMZ, though according to the customer "It's not &lt;EM&gt;really&lt;/EM&gt; a DMZ...Look, we even labeled it something&amp;nbsp;different on the visio!"&amp;nbsp; Additionally, they had Client Access Servers "designated" as "internal" or "external" in the same AD site.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Guess what?&amp;nbsp; They ended up on the phone with us! (shocking I know).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;And guess what the problem was? ActiveSync was attempting to proxy from the CAS in Data Center A's DMZ to the CAS in Data Center B's DMZ, but this traffic was not allowed.&amp;nbsp; The customer intended for the proxy traffic to only go the the HUB/CAS combo servers in the Internal Network in data center B.&amp;nbsp; But it didn't (obviously) and the firewall/routing caused the request to be blocked and fail.&lt;/P&gt;
&lt;P&gt;This is an illustration of the simplest of all crazy issues you can and will hit if you deploy this way, but hey - maybe you're weird and just love problems or perhaps you just love calling into PSS.&amp;nbsp; Either way - happy deployments!&lt;/P&gt;
&lt;P&gt;I'm sure I'll be adding to this list as time goes on (or as I think about more things).&amp;nbsp; Please spread the word, help our customers, and don't let them get into this situation.&amp;nbsp; This goes out to the field, partners, MVP's, etc - It's your job to help our customers make the right call; together we can make a difference.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8461480" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="Exchange 2007" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Exchange+2007/" /><category term="CAS" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/CAS/" /></entry><entry><title>Autodiscover HTTP Redirect Method using ISA instead of a second web site</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/12/18/autodiscover-http-redirect-method-using-isa-instead-of-a-second-web-site.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/12/18/autodiscover-http-redirect-method-using-isa-instead-of-a-second-web-site.aspx</id><published>2007-12-18T23:12:00Z</published><updated>2007-12-18T23:12:00Z</updated><content type="html">&lt;P&gt;Many customers that are hosting multiple SMTP domains need to use one of our Autodiscover "redirect" methods to deploy autodiscover instead of the pre-defined URL approach.&amp;nbsp; When customers choose a "redirect" method they have two options.&amp;nbsp; Below is a chart with both options and some Pro's and Con's of each.&lt;/P&gt;
&lt;TABLE class="" border=1&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD class=""&gt;Method&lt;/TD&gt;
&lt;TD class=""&gt;Pros&lt;/TD&gt;
&lt;TD class=""&gt;Cons&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;HTTP Redirect&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;UL&gt;Works in all scenarios&lt;/UL&gt;
&lt;UL&gt;Works with all Outlook 2007 Client versions&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;UL&gt;Complex to implement&lt;/UL&gt;
&lt;UL&gt;Complex to maintain&lt;/UL&gt;
&lt;UL&gt;Requires 2 public IP's&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD class=""&gt;DNS SRV Record&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;UL&gt;Very easy to implement&lt;/UL&gt;
&lt;UL&gt;&lt;/UL&gt;
&lt;UL&gt;Requires only 1 Public IP Address&lt;/UL&gt;&lt;/TD&gt;
&lt;TD class=""&gt;
&lt;UL&gt;Some DNS Providers don't support DNS SRV records&lt;/UL&gt;
&lt;UL&gt;Doesn't work in&amp;nbsp;100% of&amp;nbsp;client scenarios (explained later)&lt;/UL&gt;
&lt;UL&gt;Requires Outlook 2007 SP1 (or Post RTM hotfix)&lt;/UL&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The DNS SRV Record method was introduced by an Outlook 2007 Post-RTM hotfix and is also included in Outlook 2007 SP1.:&lt;BR&gt;940881&amp;nbsp;A new feature is available that enables Outlook 2007 to use DNS Service Location (SRV) records to locate the Exchange Autodiscover service&lt;BR&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;940881" mce_href="http://support.microsoft.com/default.aspx?scid=kb;EN-US;940881"&gt;http://support.microsoft.com/default.aspx?scid=kb;EN-US;940881&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;This method is great except for its few drawbacks.&amp;nbsp; First, you have to make sure all of your clients have this fix or SP1. In some environments, control of the client is not possible so this may&amp;nbsp;discount this option immediately.&amp;nbsp; Another consideration with the SRV record method is whether or not *client* environments support the DNS SRV records.&amp;nbsp; For instance, if your only internet access and/or name resolution is through a proxy (or ISA Firewall Client), you have no way of resolving SRV records.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;With these drawbacks in mind, I wanted to bring light to the original method of redirecting autodiscover clients, the HTTP redirect method.&amp;nbsp; The implementation of this method via IIS is discussed in&amp;nbsp;by Jason Mayans at &lt;A href="http://blogs.technet.com/jmayans/archive/2006/09/07/454716.aspx" mce_href="http://blogs.technet.com/jmayans/archive/2006/09/07/454716.aspx"&gt;http://blogs.technet.com/jmayans/archive/2006/09/07/454716.aspx&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;After reading that, you should have a good idea that load balancing and hosting this extra redirect IIS site&amp;nbsp;can be&amp;nbsp;a nightmare.&amp;nbsp; Luckily, you can do it ALL at ISA!&amp;nbsp; Well 04 and 06 at least, I don't care if ISA 2000 can do it or not.&amp;nbsp; You still need an extra public IP, but the ISA redirection works great and if you have an array of ISA servers, it's automatically load balanced!&lt;/P&gt;
&lt;P&gt;First, bind that new public IP to ISA.&amp;nbsp; Then start by creating a new Web Publishing Rule.&lt;/P&gt;
&lt;P&gt;The Rule action will actually be set to Deny (We'll configure the redirect later)&lt;/P&gt;
&lt;P&gt;The rest of this stuff is mostly irrelevant since it's a Deny Rule.&amp;nbsp; I chose:&lt;/P&gt;
&lt;P&gt;"Publish a single Web site or load balancer"&lt;BR&gt;"Use non-secured connections to connect to the published Web server or server farm"&lt;BR&gt;"this.does.not.matter" for the "Internal Site Name"&lt;/P&gt;
&lt;P&gt;Set the path to the actual Autodiscover.xml file: /autodiscover/autodiscover.xml&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/2.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/2.jpg"&gt;&lt;/P&gt;
&lt;P&gt;For the public name, you can set it to either the first of your hosted SMTP domains or just set the "Accept Requests for:" to "Any".&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/3.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/3.jpg"&gt;&lt;/P&gt;
&lt;P&gt;You'll want to create a new HTTP web listener, call it something like Autodiscover Redirect Listener.&lt;/P&gt;
&lt;P&gt;Choose "Do not require SSL secured connections with clients" (very important as this redirect must be HTTP).&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/4.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/4.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Select the new IP you bound to ISA for the Autodiscover Redirect listener.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/5.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/5.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Choose "No Authentication" as these requests will always be anonymous.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/6.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/6.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Ensure your new listener is selected in the wizard.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/7.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/7.jpg"&gt;&lt;/P&gt;
&lt;P&gt;For the Auth delegation, you can choose "No delegation, and client cannot authenticate directly"&lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;IMG style="WIDTH: 502px; HEIGHT: 483px" height=483 src="http://brad_hughes.members.winisp.net/autodiscoverisa/8.jpg" width=502 mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/8.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The rule cannot require authentication, so ensure "All Users" is selected.&lt;/P&gt;
&lt;P&gt;Complete the rule.&lt;/P&gt;
&lt;P&gt;You'll need to bring up properties on the rule and proceed to the "Action" tab.&amp;nbsp; It should be set to deny.&amp;nbsp; Put a check in the "Redirect HTTP requests to this Web Page" and enter the full HTTPS URL (matching your certificate),&amp;nbsp;a which you have autodiscover published.&amp;nbsp; Mine was https://mail.wingtiptoys.com/autodiscover/autodiscover.xml.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/9.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/9.jpg"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;On the "Public Name" tab, you will need to add autodiscover.&amp;lt;each hosted smtp domain&amp;gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/10.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/10.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Finally in each hosted SMTP domain's public DNS zone, create an A record for Autodiscover and point it to this new IP on the redirect site.&lt;/P&gt;
&lt;P&gt;You can test this by browsing to http://autodiscover.hosteddomain.com/autodiscover/autodiscover.xml in your browser.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/11.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/11.jpg"&gt;&lt;/P&gt;
&lt;P&gt;It should redirect you to the URL you specified in the rule.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/12.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/12.jpg"&gt;&lt;/P&gt;
&lt;P mce_keep="true"&gt;On launch of Outlook 2007, you should end up with a one-time dialog asking the user to allow this URL to configure their Outlook profile if you've done this right.&lt;/P&gt;
&lt;P&gt;&lt;IMG src="http://brad_hughes.members.winisp.net/autodiscoverisa/13.jpg" mce_src="http://brad_hughes.members.winisp.net/autodiscoverisa/13.jpg"&gt;&lt;BR&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6799189" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="Exchange 2007" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Exchange+2007/" /><category term="Autodiscover" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Autodiscover/" /><category term="CAS" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/CAS/" /><category term="ISA" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/ISA/" /></entry><entry><title>Handy way to restart downed Exchange Services (and only the ones you need)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/11/20/handy-way-to-restart-downed-exchange-services-and-only-the-ones-you-need.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/11/20/handy-way-to-restart-downed-exchange-services-and-only-the-ones-you-need.aspx</id><published>2007-11-21T01:02:00Z</published><updated>2007-11-21T01:02:00Z</updated><content type="html">&lt;P&gt;Here's a quick Powershell one-liner to start up all the necessary Exchange Services for any given role.&lt;/P&gt;
&lt;P&gt;Test-ServiceHealth | Select-Object -Expand ServicesNotRunning | Start-Service&lt;/P&gt;
&lt;P&gt;There is also the old standby:&lt;BR&gt;Get-Service *Exchange* | Start-Service&lt;/P&gt;
&lt;P&gt;But that one can start unnecessary services (set to manual) like the Exchange Pop3 and Imap4 service.&lt;/P&gt;
&lt;P&gt;Just thought it'd make and interesting post because not too many people know about the Test-ServiceHealth cmdlet.&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6444629" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="Exchange 2007" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Exchange+2007/" /><category term="PowerShell" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/PowerShell/" /></entry><entry><title>CAS Load-Balancing Best Practices (Part 2)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/10/29/cas-load-balancing-best-practices-part-2.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/10/29/cas-load-balancing-best-practices-part-2.aspx</id><published>2007-10-29T12:57:00Z</published><updated>2007-10-29T12:57:00Z</updated><content type="html">&lt;p&gt;&lt;strong&gt;CAS Load Balancing Best Practices (Part 2: Load balancing Intranet aka &amp;quot;Non-Internet facing&amp;quot; sites): &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;For Part 1 of this post, go here: &lt;a class="class" title="CAS Load-Balancing Best Practices (Part 1)" href="http://blogs.msdn.com/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx" mce_href="http://blogs.msdn.com/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx"&gt;CAS Load-Balancing Best Practices (Part 1)&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;You need to understand CAS-&amp;gt;CAS Proxying before you try to understand load-balancing proxy CAS's.&amp;#160; Please read the following technet documentation if you don't understand CAS-&amp;gt;CAS Proxy before proceeding:&lt;/p&gt;  &lt;p&gt;&lt;a class="class" href="http://technet.microsoft.com/en-us/library/bb310763.aspx" target="_blank" mce_href="http://technet.microsoft.com/en-us/library/bb310763.aspx"&gt;Understanding Proxying and Redirection&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The first big question is whether or not load balancing is required in the second site. Originally it was thought that the CAS in the first site would do load balancing and redundancy for the individual CAS's at an application layer.&amp;#160; We later found out that this is 100% true for OWA and Exchange Web Services Proxy but untrue for Activesync and Unified messaging proxy.&lt;/p&gt;  &lt;p mce_keep="true"&gt;So, to get full load-balancing and redundancy for all services, you must deploy load balancing in the proxy sites as well as pictured below:&lt;/p&gt;  &lt;p mce_keep="true"&gt;&lt;img style="width: 358px; height: 260px" title="CAS Proxy with NLB" alt="CAS Proxy with NLB" src="http://technet.microsoft.com/en-us/library/Bb310763.868570df-7ee5-4fbc-9521-0a19c3d8983f(en-us,TechNet.10).gif" width="358" height="260" mce_src="http://technet.microsoft.com/en-us/library/Bb310763.868570df-7ee5-4fbc-9521-0a19c3d8983f(en-us,TechNet.10).gif" /&gt;&lt;/p&gt;  &lt;p mce_keep="true"&gt;The trickiest part to this is not conifguring the NLB, it is knowing how to configure all of the URL parameters for the destination CAS.&lt;/p&gt;  &lt;p mce_keep="true"&gt;Our documentation topic on technet &lt;a class="class" title="Understanding Proxy and Redirection" href="http://technet.microsoft.com/en-us/library/bb310763.aspx" target="_blank" mce_href="http://technet.microsoft.com/en-us/library/bb310763.aspx"&gt;&amp;quot;Understanding Proxying and Redirection&amp;quot;&lt;/a&gt; covers this in some detail.&amp;#160; I'm leveraging our chart below for reference on how to set the individual parameters for the Virtual Directories.&lt;/p&gt; &lt;strong&gt;Virtual directory settings for non-Internet-facing Client Access servers in an organization that uses NLB&lt;/strong&gt;   &lt;p mce_keep="true"&gt;   &lt;table style="background-color: #ffffff" class="class" border="1" width="100%"&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;th class="class"&gt;Virtual directory &lt;/th&gt;          &lt;th class="class"&gt;InternalURL setting &lt;/th&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class"&gt;           &lt;p&gt;/OWA&lt;/p&gt;         &lt;/td&gt;          &lt;td class="class"&gt;           &lt;p&gt;https://&lt;i&gt;computername&lt;/i&gt;/OWA&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class"&gt;           &lt;p&gt;/OAB&lt;/p&gt;         &lt;/td&gt;          &lt;td class="class"&gt;           &lt;p&gt;https://NLBname/OAB&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class"&gt;           &lt;p&gt;/UnifiedMessaging&lt;/p&gt;         &lt;/td&gt;          &lt;td class="class"&gt;           &lt;p&gt;https://NLBname/UnifiedMessaging&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class"&gt;           &lt;p&gt;/Microsoft-Server-ActiveSync*&lt;/p&gt;         &lt;/td&gt;          &lt;td class="class"&gt;           &lt;p&gt;https://NLBname/Microsoft-Server-ActiveSync&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td class="class"&gt;           &lt;p&gt;/EWS**&lt;/p&gt;         &lt;/td&gt;          &lt;td class="class"&gt;           &lt;p&gt;https://&lt;i&gt;NLBname&lt;/i&gt;/EWS&lt;/p&gt;         &lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;* NOTE:&lt;/strong&gt; &lt;em&gt;This does &lt;strong&gt;NOT&lt;/strong&gt; work in RTM for ActiveSync due to some Keberos issues.&amp;#160; You must set the InternalUrl to &lt;/em&gt;&lt;em&gt;https://computername/Microsoft-Server-Activesync&lt;/em&gt;&lt;em&gt; and you get no fault tolerance if a CAS in the seond site goes down.&amp;#160; We corrected these Kerberos issues in SP1 so you should be able to set the InternalUrl to the NLBname at that time.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;** NOTE:&lt;/strong&gt;&lt;em&gt; EWS does not use the InternalUrl for proxying core EWS traffic and instead uses the InternalNLBBypassUrl configured on the Virtual Directory (this should always be configured to the machine FQDN).&amp;#160; Proxying for the Availability service will use the InternalUrl but affinity is not required.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&amp;#160;&lt;/strong&gt;&lt;strong&gt;Note in regard to Affinity settings     &lt;br /&gt;&lt;/strong&gt;OWA and EWS are &amp;quot;stateful&amp;quot; applications.&amp;#160; Because of this, they must maintain the connection with the same CAS throughout a users session.&amp;#160; However, because OWA and EWS use application-level load-balancing and failover and do not route through your load-balancer in the remote site, Affinity on the load balancer should not be an issue.&amp;#160; EAS and UnifiedMessaging are stateless and can be handled by any CAS on subsequent requests so for them, the load balancing affinity can be set to &amp;quot;None&amp;quot; in the proxy site to ensure even distribution of requests.&lt;/p&gt;  &lt;p&gt;Have fun deploying your CAS Proxy + NLB Solutions!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5764099" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author></entry><entry><title>New Updates to Autodiscover Whitepaper available</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/10/15/new-updates-to-autodiscover-whitepaper-available.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/10/15/new-updates-to-autodiscover-whitepaper-available.aspx</id><published>2007-10-15T15:54:00Z</published><updated>2007-10-15T15:54:00Z</updated><content type="html">&lt;P&gt;Just wanted to let folks know that a new update to the Autodiscover Whitepaper is now available.&amp;nbsp; This now contains tons more information regarding certificates, web service URL's, best practices, etc.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;You can find&amp;nbsp;the whitepaper&amp;nbsp;here:&lt;BR&gt;&lt;A href="http://technet.microsoft.com/en-us/library/bb332063.aspx"&gt;http://technet.microsoft.com/en-us/library/bb332063.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You can find the Exchange team blog announcment here:&lt;BR&gt;&lt;A href="http://msexchangeteam.com/archive/2007/10/03/447176.aspx"&gt;http://msexchangeteam.com/archive/2007/10/03/447176.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The only thing it doesn't really cover right now is load-balancing, for that you can see my series on CAS load-balancing here: &lt;A href="http://blogs.msdn.com/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx"&gt;http://blogs.msdn.com/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx&lt;/A&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5461446" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="Exchange 2007" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Exchange+2007/" /><category term="Autodiscover" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Autodiscover/" /><category term="CAS" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/CAS/" /></entry><entry><title>AutodiscoverSiteScope and Client-only sites</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/09/11/autodiscoversitescope-and-client-only-sites.aspx" /><link rel="enclosure" type="application/zip" length="456492" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-04-86-57-26/AutoSetSiteScope.zip" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/09/11/autodiscoversitescope-and-client-only-sites.aspx</id><published>2007-09-11T16:53:00Z</published><updated>2007-09-11T16:53:00Z</updated><content type="html">&lt;p&gt;The Exchange Autodiscover service is very smart when it hands out URLs for web services to clients.&amp;nbsp; It will always hand out URLs that are in the same&amp;nbsp;Active Directory&amp;nbsp;site as the user's mailbox server.&amp;nbsp; Unfortunately, when it comes to Outlook locating Autodiscover originally, the client just isn't that smart.&amp;nbsp; The way a domain-joined client can find a local Autodiscover service is by utilizing the AutodiscoverSiteScope information that is part of the Service-Connection-Point (SCP) object in Active Directory.&lt;/p&gt;
&lt;p&gt;This AutodiscoverSiteScope attribute must be populated manually using the Set-ClientAccessServer cmdlet.&lt;br /&gt;&lt;em&gt;Set-ClientAccessServer -identity &amp;lt;name of CAS&amp;gt; -AutodiscoverSiteScope Site1,Site2,Site3&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;At install, this attribute is populated with the AD Site of it's corresponding CAS.&amp;nbsp; That way any clients that are in the same AD Site as the CAS will be able to use the local server to make Autodiscover Requests.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The problem occurs when you have AD Sites that only have Outlook clients (and not Exchange Servers).&amp;nbsp; By default, they will just use a Random CAS for Autodiscover (or the first one comes back from AD in the LDAP query).&amp;nbsp; To select a site for these clients to use, you can add the "Client site" to the AutodiscoverSiteScope Attribute on each CAS in the closest AD site.&amp;nbsp; That way you conserve bandwidth and improve performance by keeping Autodiscover traffic relatively local.&lt;/p&gt;
&lt;p&gt;For more information on configuring the AutodiscoverSiteScope attribute and it's uses, see: &lt;a title="How to Configure the Autodiscover Service to Use Site Affinity" href="http://technet.microsoft.com/en-us/library/aa998575.aspx"&gt;How to Configure the Autodiscover Service to Use Site Affinity&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I was recently presented with the situation of a customer who had over 2000 AD sites with Outlook clients but a relatively small number of sites with Exchange servers.&amp;nbsp; They were faced with the potential of having to add thousands of AD Sites to the AutodiscoverSiteScope by hand.&amp;nbsp; This got me to thinking that this could be automated with a small amount of effort.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Below is a sample of automating that process.&amp;nbsp; This PowerShell script makes use of a command-line tool (CalcSiteCost.exe)&amp;nbsp;that uses the NTDS API's &lt;em&gt;DsQuerySitesByCost&lt;/em&gt; to calculate the cost between each client site and each Exchange Site.&lt;/p&gt;
&lt;p&gt;The syntax used for CalcSiteCost.exe is: &lt;em&gt;CalcSiteCost.exe fromSite toSite1 [toSite2 toSite3 ...]&lt;/em&gt;.&amp;nbsp; The results are returned as simple integers (one per line) that are printed to the console.&amp;nbsp; The PowerShell script parses the console output and casts each one to an integer and adds it to an int[].&lt;/p&gt;
&lt;p&gt;Both the sample script and the sample source and binary for CalcSiteCost are available as an attachment to the post.&lt;/p&gt;
&lt;p&gt;# Check for verbose param&lt;br /&gt;if($Args -contains "-verbose" -or $Args -contains "-vb")&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;$VerbosePreference = "Continue";&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;# load required .NET Assemblies&lt;br /&gt;$temp = [System.Reflection.Assembly]::LoadWithPartialName("System.DirectoryServices")&lt;/p&gt;
&lt;p&gt;# Get current forest info&lt;br /&gt;$forest = [System.DirectoryServices.ActiveDirectory.Forest]::GetCurrentForest();&lt;/p&gt;
&lt;p&gt;# Build list of sites that have Exchange Servers&lt;br /&gt;[string[]]$exchangeSites = @();&lt;/p&gt;
&lt;p&gt;Get-ExchangeServer | Where {$_.serverrole -contains "ClientAccess"} | foreach { $exchangeSites += $_.Site.Name; }&lt;/p&gt;
&lt;p&gt;# or you can manually set the Exchange sites if you prefer&lt;br /&gt;# $exchangeSites = "Charlotte","Redmond"&lt;/p&gt;
&lt;p&gt;# Loop through each Exchange Site&lt;br /&gt;foreach($clientsite in $forest.sites)&lt;br /&gt;{&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;$leastCostExchangeName = "";&lt;br /&gt;&amp;nbsp;$leastCostExchangeCost = 99999;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;[int[]] $costArray = @();&lt;br /&gt;&amp;nbsp;.\CalcSiteCost.exe $clientsite.Name $exchangeSites | foreach { $costArray += [Int32]::Parse($_); }&lt;/p&gt;
&lt;p&gt;&amp;nbsp;# find the lowest cost and note the site&amp;nbsp;&lt;br /&gt;&amp;nbsp;for($i=0; $i -lt $costArray.Length; $i++)&lt;br /&gt;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;if($costArray[$i] -lt $leastCostExchangeCost)&lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$leastCostExchangeCost = $costArray[$i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$leastCostExchangeName = $exchangeSites[$i];&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;}&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;write-host ("Least cost Exchange Site for client site " + $clientsite.Name + " is " + $leastCostExchangeName + " Cost: " +$leastCostExchangeCost);&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;# Get the list of &lt;br /&gt;&amp;nbsp;$closestCASList = Get-ExchangeServer | Where {$_.serverrole -contains "ClientAccess"} | where {$_.site.Name -eq $leastCostExchangeName};&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;foreach($closeCas in $closestCASList)&lt;br /&gt;&amp;nbsp;{&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;# Get existing attribute&lt;br /&gt;&amp;nbsp;&amp;nbsp;$clientsiteScopeList = (Get-ClientAccessServer -identity $closeCas.Name).AutoDiscoverSiteScope;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;# big special case for $null&lt;br /&gt;&amp;nbsp;&amp;nbsp;if($clientsiteScopeList -eq $null) &lt;br /&gt;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Set-ClientAccessServer -identity $closeCas.Name -AutoDiscoverSiteScope "";&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$clientsiteScopeList = (Get-ClientAccessServer -identity $closeCas.Name).AutoDiscoverSiteScope;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;$clientsiteScopeList.Clear();&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;# If It's not already in the list, add it.&lt;br /&gt;&amp;nbsp;&amp;nbsp;if($clientsiteScopeList -notcontains $clientsite.Name) { $clientsiteScopeList.Add($clientsite.Name); }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;# Set the updated list back to using Set-ClientAccessServer&lt;br /&gt;&amp;nbsp;&amp;nbsp;Set-ClientAccessServer -identity $closeCas.Name -AutodiscoverSiteScope $clientsiteScopeList&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4865726" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="Exchange 2007" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Exchange+2007/" /><category term="Autodiscover" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Autodiscover/" /><category term="CAS" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/CAS/" /><category term="Sample" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Sample/" /><category term="PowerShell" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/PowerShell/" /></entry><entry><title>CAS Load-Balancing Best Practices (Part 1)</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/09/10/cas-load-balancing-certificates-autodiscover-and-webservices.aspx</id><published>2007-09-10T17:05:00Z</published><updated>2007-09-10T17:05:00Z</updated><content type="html">&lt;P&gt;There just isn't much in the way of How-to / Best Practices type of information regarding load Balancing Client Access Servers in Exchange 2007.&amp;nbsp; Soon we should be releasing additional Technet content relating to the deployment of Autodiscover and Web Services in the form of an Autodiscover White Paper, but this content doesn't include any information regarding best practices around load balancing Autodiscover and Exchange Web Services.&amp;nbsp; This information will be crucial for most medium to large companies migrating to Exchange 2007.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Below are my thoughts on some best practices when it comes to load balancing these Client Access Web Services.&amp;nbsp; I will be posting a series of posts dedicated to this topic.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;CAS Load Balancing Best Practices (Part 1: Internet-facing: NLB, Authentication, InternalUrls, ExternalURLs, Certificates):&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Background:&lt;BR&gt;AD Sites that contain Exchange 2007 servers&amp;nbsp;should be thought of in two ways.&amp;nbsp; Internet-facing sites and intranet (non-Internet facing sites).&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Best Practice #1: ALL Client Access Servers within&amp;nbsp;the same&amp;nbsp;Internet-facing site should be:&lt;/STRONG&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;In an NLB of some sort. Whether Windows NLB, ISA 06 NLB, or Hardware NLB.&lt;/LI&gt;
&lt;LI&gt;Have ALL ExternalURL's exactly the same with the public name of the NLB.&lt;/LI&gt;
&lt;LI&gt;Have ALL InternalURL's exactly the same with the private name of the NLB.&lt;/LI&gt;
&lt;LI&gt;ALL be configured for the same types of authentication for each HTTP based service.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;Why do all of them have to be in the NLB?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The&amp;nbsp;real answer here is to eliminate confusion.&amp;nbsp;&amp;nbsp;Many Exchange 2007 Services (such as Autodiscover) choose Client Access Servers at random&amp;nbsp;for clients to connect to.&amp;nbsp; If they are all in the same site, they basically server the same function and thus should be in the same place.&amp;nbsp; If you have some extenuating&amp;nbsp;circumstance like needs to have 2 NLB's&amp;nbsp;(one for internal&amp;nbsp;OWA and one for external OWA), this guidance may not apply to you.&amp;nbsp; However, you should adhere to the guidance below of having a different private name for each NLB of Client Access Servers.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;What is this public name versus private name stuff?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Public Name&lt;/STRONG&gt;: This should be the name that the outside world uses to access your Outlook Web Access, Exchange Activesync,&amp;nbsp;and/or Outlook Anywhere services for mailboxes in &lt;EM&gt;this&lt;/EM&gt; Internet Facing site.&amp;nbsp;This would be a manually created DNS entry in your&amp;nbsp;&lt;STRONG&gt;public&lt;/STRONG&gt; DNS zone.&amp;nbsp;For instance: &lt;STRONG&gt;https://usamail.contoso.com/EWS/Exchange.asmx&lt;/STRONG&gt;&amp;nbsp;might be my ExternalUrl for all my WebServicesVirtualDirectory objects in Contoso Corp's USA Site.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Private Name&lt;/STRONG&gt;: This should be a manually created DNS&amp;nbsp;name within your &lt;STRONG&gt;internal&lt;/STRONG&gt; DNS zone.&amp;nbsp; This will primarily be used for Exchange Web Services, so you may want to choose a name like ews.ad.contoso.com or websvcs.ad.contoso.com (Notice ad.contoso.com is within my internal DNS namespace).&amp;nbsp;Likewise: &lt;STRONG&gt;https://ews.ad.contoso.com/EWS/Exchange.asmx&lt;/STRONG&gt; might be the InternalUrl for all the WebServicesVirtualDirectory objects in Contoso Corp's USA Site.&amp;nbsp; If you have two different NLB's within the same site for different purposes, you should have two different private&amp;nbsp;names with the InternalUrl's on the corresponding CAS's modified accordingly.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;What about certs?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The only &lt;EM&gt;real&lt;/EM&gt; way to do this is to obtain a 3rd party certificate that supports Subject Alternative names.&amp;nbsp; For a list of Certificate Authorities offering these type of certificates, check this KB article: &lt;A href="http://support.microsoft.com/kb/929395/en-us" mce_href="http://support.microsoft.com/kb/929395/en-us"&gt;http://support.microsoft.com/kb/929395/en-us&lt;/A&gt;.&amp;nbsp;In most cases, you will only need 3 Subject Alternative Names on a certificate. I suggest:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;mail.contoso.com (or whatever name you want to use for OWA, EAS, and RPC/HTTP.&amp;nbsp;This should also be the "Issued to" or common name)&lt;/LI&gt;
&lt;LI&gt;autodiscover.contoso.com (you will need one of these for every primary SMTP address domain in your organization).&lt;/LI&gt;
&lt;LI&gt;ews.ad.contoso.com (one Subject Alternative Name that exists in your internal DNS namespace).&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;For more information on generating the certificate request see: &lt;A class="" href="http://technet.microsoft.com/en-us/library/aa998840.aspx" mce_href="http://technet.microsoft.com/en-us/library/aa998840.aspx"&gt;Creating a Certificate or Certificate Request for TLS&lt;/A&gt;&amp;nbsp;on Technet.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;What do you mean by have the same authentication for every HTTP service?&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;For each Virtual Directory in IIS, you should have consistent authentication methods selected for every CAS in your NLB.&amp;nbsp; If you don't, you'll run into goofy issues when a client that was talking to a certain CAS gets&amp;nbsp;load-balanced to a different CAS.&amp;nbsp; This doesn't mean that just because you use Basic Auth for OWA that you have to use Basic for Outlook Anywhere.&amp;nbsp; It just means that if you use Basic on Outlook Anywhere on one CAS, you need to make sure that Basic is configured for every other CAS in the NLB.&amp;nbsp; This should be common-sense.&lt;/P&gt;
&lt;P&gt;I'll cover additional&amp;nbsp;topics such as Client Affinity, Intranet CAS Deployments, etc in later posts.&lt;/P&gt;
&lt;P&gt;For the next post in this series, see: &lt;A class="" title="CAS Load-Balancing Best Practices (Part 2)" href="http://blogs.msdn.com/brad_hughes/archive/2007/10/29/cas-load-balancing-best-practices-part-2.aspx" mce_href="http://blogs.msdn.com/brad_hughes/archive/2007/10/29/cas-load-balancing-best-practices-part-2.aspx"&gt;CAS Load-Balancing Best Practices (Part 2)&lt;/A&gt;&amp;nbsp;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4853384" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="Exchange 2007" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Exchange+2007/" /><category term="OWA" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/OWA/" /><category term="Autodiscover" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/Autodiscover/" /><category term="CAS" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/CAS/" /></entry><entry><title>Ah, leftovers from DST...</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/brad_hughes/archive/2007/09/06/ah-leftovers-from-dst.aspx" /><id>http://blogs.msdn.com/b/brad_hughes/archive/2007/09/06/ah-leftovers-from-dst.aspx</id><published>2007-09-06T17:23:00Z</published><updated>2007-09-06T17:23:00Z</updated><content type="html">&lt;P&gt;Yesterday&amp;nbsp;I got looped into a call where a customer that reported that meeting requests were&amp;nbsp;ahead by an hour when he sent them to the Internet.&amp;nbsp; Knowing this had to have something to do with Timezones and DST, I whipped together a quick tool to Display UTC time, Local time, and some other time zone information.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;We can always verify what's in the Windows Time Zone Database using TZEdit but&amp;nbsp;not information on the current time zone.&amp;nbsp; You could also&amp;nbsp;pull this from the registry HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\TimeZoneInformation if you know how to interpret the data, but this makes it much easier.&amp;nbsp; But in addition to all this, I would've never figured out this issue without the UTC display from this tool.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;In the customer's case, the UTC time showed he was an hour ahead of the rest of the world in his domain but because he had hacked up his timezone information to display the local time correctly, he had no idea his UTC time was wrong.&lt;/P&gt;
&lt;P mce_keep="true"&gt;Here is some sample output:&lt;/P&gt;
&lt;P mce_keep="true"&gt;UTC System Time: 9/5/2007 21:47&lt;BR&gt;Local System Time: 9/5/2007 17:47&lt;BR&gt;Operating in DAYLIGHT time&lt;BR&gt;Time Zone Name: Eastern Daylight Time&lt;BR&gt;Daylight Bias: -60 Minutes (or -1 Hours)&lt;BR&gt;Standard: Occurs first Sunday of November at 2: 0&lt;BR&gt;Daylight: Occurs second Sunday of March at 2: 0&lt;BR&gt;Bias: 300 Minutes (or 5 Hours)&lt;/P&gt;
&lt;P mce_keep="true"&gt;For anyone who's interested, here is the source of the main function.&amp;nbsp; It demonstrates the use of the GetSystemTime, SystemTimeToTzSpecificLocalTime, and GetTimeZoneInformation functions.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;int&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; _tmain(&lt;SPAN style="COLOR: blue"&gt;int&lt;/SPAN&gt; argc, _TCHAR* argv[])&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTEMTIME&amp;nbsp; utctime;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// Apparently this function cannot fail - no need to check error case&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetSystemTime(&amp;amp;utctime);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; L&lt;SPAN style="COLOR: #a31515"&gt;"UTC System Time: %i/%i/%i %i:%i\r\n"&lt;/SPAN&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utctime.wMonth,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utctime.wDay,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utctime.wYear,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utctime.wHour,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; utctime.wMinute&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SYSTEMTIME&amp;nbsp; localtime;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BOOL fResult = SystemTimeToTzSpecificLocalTime(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// current timezone&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;utctime,&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// input time&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp;localtime&amp;nbsp; &lt;SPAN style="COLOR: green"&gt;// output time&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt;(!fResult)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"SystemTimeToTzSpecificLocalTime failed.\r\n"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; -1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; L&lt;SPAN style="COLOR: #a31515"&gt;"Local System Time: %i/%i/%i %i:%i\r\n"&lt;/SPAN&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localtime.wMonth,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localtime.wDay,&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localtime.wYear,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localtime.wHour,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; localtime.wMinute&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TIME_ZONE_INFORMATION tzInfo;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DWORD dwResult = GetTimeZoneInformation(&amp;amp;tzInfo);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;switch&lt;/SPAN&gt;(dwResult)&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;case&lt;/SPAN&gt; 0:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Operating in UNKNOWN time\r\n"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; -1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;case&lt;/SPAN&gt; 1:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Operating in STANDARD time\r\n"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Time Zone Name: %s \r\n"&lt;/SPAN&gt;, tzInfo.StandardName);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Standard Bias: %i Minutes (or %i Hours) \r\n"&lt;/SPAN&gt;, tzInfo.StandardBias, tzInfo.StandardBias / 60);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;break&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;case&lt;/SPAN&gt; 2:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Operating in DAYLIGHT time\r\n"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Time Zone Name: %s \r\n"&lt;/SPAN&gt;, tzInfo.DaylightName);&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Daylight Bias: %i Minutes (or %i Hours) \r\n"&lt;/SPAN&gt;, tzInfo.DaylightBias, tzInfo.DaylightBias / 60);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;break&lt;/SPAN&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;default&lt;/SPAN&gt;:&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; -1;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Standard: Occurs %s %s of %s at %i:%2i\r\n"&lt;/SPAN&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetOccurrenceString(tzInfo.StandardDate.wDay),&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDayString(tzInfo.StandardDate.wDayOfWeek),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMonthString(tzInfo.StandardDate.wMonth),&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tzInfo.StandardDate.wHour,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tzInfo.StandardDate.wMinute&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Daylight: Occurs %s %s of %s at %i:%2i\r\n"&lt;/SPAN&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetOccurrenceString(tzInfo.DaylightDate.wDay),&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetDayString(tzInfo.DaylightDate.wDayOfWeek),&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; GetMonthString(tzInfo.DaylightDate.wMonth),&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tzInfo.DaylightDate.wHour,&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tzInfo.DaylightDate.wMinute&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; );&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; wprintf(L&lt;SPAN style="COLOR: #a31515"&gt;"Bias: %i Minutes (or %i Hours) \r\n"&lt;/SPAN&gt;, tzInfo.Bias, tzInfo.Bias / 60);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _getch();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; 0;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;}&lt;/SPAN&gt;&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4787915" width="1" height="1"&gt;</content><author><name>Brad Hughes [MSFT]</name><uri>http://blogs.msdn.com/bradhugh/ProfileUrlRedirect.ashx</uri></author><category term="DST" scheme="http://blogs.msdn.com/b/brad_hughes/archive/tags/DST/" /></entry></feed>