Casting Enums by using Extension Methods in C#.

Wednesday, June 23, 2010 8:39
Posted in category Uncategorized

In C# there is no way to implicity cast one enum to another.

One possible way around this is by assigning values to each enum member. If the values of the first enum match the values of the second enum, you use two casts; the first casting the first enum value to an integer, and the second casts the integer to the second enum.

But this will only work if the values match, or if there is a function that you use to ‘calculate’ the second value.

If this is not possible, you can use Extension Methods to cast one enum to another.

Here is a generic example that uses two enum types. One is a custom ‘Day’ enum. The idea is that is should be possible to cast the custom ‘Day’ enum to the DayOfWeek enum, that is defined by default in C#. (I didn’t say this example was useful, but it’s the idea that counts.)

 public enum Day { Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, }

Now, we implement two custom extension methods. One on the Day enum AND one on the DayOfWeek enum to enable some sort of conversion;

 public static class DayExtensions
{
   public static DayOfWeek ToDayOfWeek(this Day day)
   {
      switch (day)
      {
         case Day.Friday: return DayOfWeek.Friday;
         case Day.Monday: return DayOfWeek.Monday;
         case Day.Saturday: return DayOfWeek.Saturday;
         case Day.Sunday: return DayOfWeek.Sunday;
         case Day.Thursday: return DayOfWeek.Thursday;
         case Day.Tuesday: return DayOfWeek.Tuesday;
         case Day.Wednesday: return DayOfWeek.Wednesday;
         default: throw new ArgumentOutOfRangeException("day");
      }
   } 
 
   public static Day ToDay(this DayOfWeek day)
   {
      switch (day)
      {
         case DayOfWeek.Friday: return Day.Friday;
         case DayOfWeek.Monday: return Day.Monday;
         case DayOfWeek.Saturday: return Day.Saturday;
         case DayOfWeek.Sunday: return Day.Sunday;
         case DayOfWeek.Thursday: return Day.Thursday;
         case DayOfWeek.Tuesday: return Day.Tuesday;
         case DayOfWeek.Wednesday: return Day.Wednesday;
         default: throw new ArgumentOutOfRangeException("day");
      }
   }
}

 

After creating these extension methods, you can use them as such;

Day day = DateTime.Now.DayOfWeek.ToDay();
DayOfWeek day = Day.Friday.ToDayOfWeek();

Have fun.

Answers to the 10 most Common Questions on the Exchange CAS-Array.

Friday, June 11, 2010 4:18
Posted in category Exchange & OCS

During my stay at TechEd 2010 in New Orleans, I had to work the Exchange Server 2010 Flexibility and Reliability booth. Although most questions were on the Exchange DAG, the second most popular discussion was around the Client Access Server (CAS) and CAS-Arrays.

Hence, the 10 most predominant questions (and of course, the answers to them);

Q1. Is it true that there can be only 1 CAS Array?

A1. There can be only 1 CAS Array per Active Directory Site. The name of the CAS Array is stored as a string on the AD-Site object. When you use the Powershell command New-ClientAccessArray you see that you have to provide an AD-Site by means of the –Site parameter.

Q2. Can I create a CAS Array when I need it, or do I need to set it up in advance?

A2. No, you can create a CAS Array whenever you need it. But keep in mind that an Exchange Database is ‘linked’ to a certain CAS Server or CAS Array. If you do not create a CAS Array up front, and decide to create one after Exchange databases have been created, you have to manually ‘link’ the existing database to the CAS Array. (This can be done with the Powershell commandlet Set-MailboxDatase; Get-MailboxDatase | Set-MailboxDatabase –RPCClientAccessServer ‘cas-array.domain.local’) Otherwise, clients will keep using the first CAS Server rather then the CAS arrray for accessing the mailbox server. Luckily, you can have a CAS array with only one server. Since best practice is to install the CAS Server before creating an Exchange 2010 mailbox server, create the CAS right after creating the CAS server.

Q3. Is it true that there can be only 8 servers in a CAS Array?

A3. No. There can be any number of CAS servers in a CAS Array. But since many use Microsoft’s Network Load Balancing for load balancing client access to the servers, they are limited to 8 servers; it a limit imposed by Microsoft Network Load Balancing, not by the CAS Array design).

Q4. Can I stretch a CAS Array over multiple IP-Subnets?

A4. Depends. There can be only one CAS Array per AD-Site. So if both IP Subnets are in a different AD-Site, you cannot.

Q5. Do I need a Hardware Load Balancer in front of my CAS Array?

A5. Not necessarily. Depending on the clients you want to support (EAS, POP, IMAP, OWA, Outlook, RPC over HTTPS) certain load balancing solutions are better suited then others. I have seen Microsoft Network Load Balancing seen used with success, whilst others have problems with this ‘free’ solution. All different protocols require different affinity implementations on the load balancer, some protocols support redirection, some support proxying.

Q6.Do I need CAS arrays in my primary site and my DR site?

A6. Most probably yes. Although DAG’s can span sites, you need to set up a CAS array in your primary site and in your DR site.

Q7. If my DAG fails over to my DR site, will my clients still be able to connect?

A7. Most probably not. Remember; You will have a different CAS Array (with a different CAS Array name) in the DR Site. Since the mailbox database is linked to a specific CAS Array, if the primary site fails, the databases might be up and running in the DR site, but the clients will still try to access the CAS Array in the failed site. So you need to change the RPCClientAccessServer on the mailbox databases that are now in the DR site. If you set it to the name of the CAS Array in the DR site, client will now need to access the database by means of the CAS Array name in the DR Site. This can be done by means of autodiscovery, but if you have older Outlook clients, you have to change the outlook profile. Furthermore, take DNS into account in such a scenario; start by lowering the TTL of the DNS records of the CAS Array’s name so that in case of a failure you can change DNS records fast. (That’s also important for all other clients besides of Outlook!)

Q8. If I upgrade from Exchange Server 2003 or 2007 to Exchange Server 2010, can I replace the old CAS servers or Front-Ends with Exchange 2010 CAS servers first?

A8. No. An Exchange Server 2010 CAS server will not serve mailboxes that are running on older versions of Exchange. So if you still have mailboxes on let’s say Exchange 2007 servers, you will need an Exchange Server 2007 CAS server to service those clients. If you try to access the Exchange 2007 mailbox through the Exchange 2010 CAS server, the server will redirect the client to the Exchange 2007 CAS (if the protocol supports it). So in stead of replacing the ‘old’ CAS servers, install NEW CAS servers. This introduces some extra complexity; since the new CAS server(s) or CAS array cannot have the same name as the old CAS Server(s) or array, you need to introduce a new namespace or DNS name. And, because of that, you might have to purchase new certificates. Yes, the CAS role is the most tricky role in the Exchange portfolio of server roles…

Q9. How many CAS Servers do I need?

A9. Although this answer depends on a lot of important factors like server sizing, protocols used, client profile, etc. there is a rule of thumb here; You will need approximately 3 CAS servers for each 4 mailbox servers.

Q10. How many certificates (of what sort) do I need for my CAS Servers?

A10. It all depends. For one single CAS array you will obviously need at least one certificate; a certificate that has the name of the CAS ARRAY. That certificate can be used on all servers in the CAS Array. If you have let’s say 2 CAS arrays in 2 sites, and each CAS array serves as a fallback for the other CAS array, it is recommended that you purchase a SAN certificate with the names of both CAS arrays in it. Install that certificate on all CAS servers in both arrays/sites. But there could be other scenario’s that would require you to put more names on the SAN certificate. You can also use wildcard certificates, but make sure that all your clients support wild card certificates. For example, most older Windows Mobile devices will have problems with wildcard certificates. Always make sure that the root CA of the certificate is trusted by the device you use.

So where are my iPhone and BlackBerry questions?

Well, since the implementation of the iPhones ‘ActiveSync’ is lacking a lot of functionality, I will not go into much details here. The iPhone currently does not support the ActiveSync redirect. Something you will be using in a DR scenario. Furthermore, it does not implement a lot of policies you can set in Exchange with regards to mobile devices. (And the iPhone even ‘tells’ Exchange that all policies were applied, when in fact, they were ignored completely.) Microsoft is really pushing Apple towards implementing all of this, but they cannot force customers to do so. Just be aware of all the 3rd party EAS clients out there as they might not be as good as you think…

As far as BlackBerry’s go; get some expensive BlackBerry Enterprise product and see how far it get’s you. Be sure to test all failover scenario’s and keep track of the load on your CAS servers!

Answers to the 10 most Common Questions on the Exchange DAG.

Friday, June 11, 2010 1:54
Posted in category Exchange & OCS

Working the Exchange booth during TechEd 2010 in New Orleans, I got lot of questions regarding the Database Availability Group, or DAG, in Exchange Server 2010. Here’s the 10 most predominant questions (and of course, the answers to them);

Q1. Can I use the DAG with Exchange Server 2010 Standard Edition?

A1. Yes, you can use the DAG with Exchange Server 2010 Standard Edition. Yet, with Exchange Server 2010 Standard Edition you are limited to 5 databases at most per mailbox server. With Exchange Server 2010 Enterprise Edition you can have anywhere from 1 to 100 databases per mailbox server.

Q2. How many mailbox servers can I have in a single DAG?

A2. You can have up to 16 mailbox servers in a single DAG. This limit is not so much imposed by the Exchange product, but it is a limitation of the Windows clustering technology that is behind Exchange’s DAG.

Q3. Can I have more then 1 DAG in a single Active Directory Site?

A3. Yes you can. Although you can have only 1 Client Access Server (CAS) Array per AD-site, you can have multiple DAGs in a single AD-Site.

Q4. How large can a single database in a DAG be?

A4. Whether you are using a DAG or not, a single mailbox database in Exchange Server 2010 (Standard or Enterprise) can hold up to 16TB of data. Depending on how you will or will not backup the data in these databases will impact how large you want a single database to become. Restoring 16TB of data, if required, takes a long time. Even from a fast disk array…

Q5. Can I run a DAG on Windows Server 2008 (R2) Standard Edition?

A5. No. Since Exchange Server 2010 uses Windows Clustering for running the DAG, you need a Windows version that supports clustering. Hence, Windows Server 2008 (R2) Standard Edition cannot be used. You will have to use either Windows Server 2008 (R2) Enterprise Edition or Datacenter Edition.

Q6. Can a DAG span multiple IP Subnets?

A6. Yes. Since Exchange Server 2010 uses Windows Clustering for running the DAG, and Windows Clustering now supports stretching the cluster over multiple IP-subnets, you can span a DAG over multiple IP-subnets.

Q7. Can I have a DAG server ‘in the cloud’?

A7. No you cannot have a DAG server ‘in the cloud’ using Microsoft Exchange Online.

Q8. Do I need an odd number of mailbox servers in a DAG?

A8. In order for a cluster to make decisions about whether a database is ‘up’ or not, we need an odd number of servers making that decision. By default, each member of the DAG has one vote. If you have an even number of nodes, and the first two nodes were separated of the other two nodes, there is no way of telling if the passive copy of the data on one of those two nodes should be activated. Therefore, another voter is required. In stead of having to put another mailbox server in the DAG, you can use a File Share Witness to break the tie. This ‘server’ does not have to be part of DAG. Hence, no, you do not need an odd number of mailbox servers in a DAG.

Q9. Will failover in a DAG always be automatic?

A9.Depending on the design of your DAG, failover may occur automatically or not. So, it depends.If you have four servers in your DAG, of which two reside in Data Center A and two reside in Data Center B, and you have a File Share Witness in Data Center A, databases will not fail over automatically to Data Center B mailbox servers in case you loose Data Center A completely because there can never be a majority of voters in Data Center B in this scenario. You will have to plan for a manual (or scripted) failover in this scenario.

Q10. Do all mailbox servers in the DAG have passive copies of all active databases?

A10. No. You can have 10 mailbox servers in a single DAG and set it up in such a way that there are never more then (for example) 3 copies of each active database at any given time. So you can, for example, have 30 active databases distributed over the 10 nodes in you DAG. Each node can than have 3 active databases. You can now configure each node to have, again, for example, 6 passive copies only.

Remember that in a DAG you can failover a single database, and you do not always have to failover an entire server!

Hope this helps!

Exchange 2010 SP1 Public Beta Available.

Monday, June 7, 2010 21:59
Posted in category Exchange & OCS

The beta version long anticipated Service Pack 1 for Exchange 2010 is available for the public now!

http://go.microsoft.com/fwlink/?LinkId=193120

There are some pretty cool features in SP1 like Mailtips and the seperation of the Online Archive from the regular mailbox.

Read the rest of this entry »

I’ll be in Bellevue.

Saturday, February 13, 2010 19:35
Posted in category Uncategorized

This week, starting valentines day, I’ll be at the MVP Global Summit. This year, and for the first time, in beautiful Bellevue.

I’ll be home on a monday… somewhere around noon…

I will keep in touch. 

Easy obfuscation with {smartassembly}.

Wednesday, January 20, 2010 21:02
Posted in category Uncategorized

image This week I finished up on a project I started at the end of 2009. The project, a .NET EPP Client, specifically for the Dutch domain registry, now nears completion, and the first beta testers are ready to test my code. (Here it is.)

Yet, I felt I needed to ‘obfuscate’ the generated code. I wanted to prevent tampering with strings inside the classes, since this is still a beta product. (The software created connects to a test server. I wanted to prevent people from changing the hostname or IP Address to the production server.)

It was clear to me that with tools like Hex Editor Nero or some sort of disassembler, you could easily change strings in the binary and keep using the beta code on a production envrionment.

So it was time to ‘obfuscate’. I quickly ran through some options. Obviously, there’s  dotfuscator. A very limited version of software ships with Visual Studio. Yet, this limited version lacks ‘obfuscation’ options. The version that would support this feature, will set you back a few thousand dollars… That’s not the amount of money I want to spend on this project.

In the end, I chose {smartassembly} as the solution that would do the obfuscation for me. It comes feature-packed and is very easy to use.

Read the rest of this entry »

HP and Microsoft Simplify Technology Environments with Solutions Built on New Infrastructure-to-Application Model

Wednesday, January 13, 2010 22:57
Posted in category Uncategorized

HP and Microsoft Corp. today announced a three-year agreement to invest $250 million to significantly simplify technology environments for businesses of all sizes.   The companies plan to deliver new solutions that will

· Be built on a next-generation infrastructure-to-application model,

· Advance cloud computing by speeding application implementation,

· Eliminate complexities of IT management and automate existing manual processes to lower overall costs

This agreement represents the industry’s most comprehensive technology stack integration to date — from infrastructure to application — and is intended to substantially improve the customer experience for developing, deploying and managing IT environments.

With this strategic partnership, HP and Microsoft will collaborate on an engineering roadmap for data management machines; converged, prepackaged application solutions; comprehensive virtualization offerings and integrated management tools. Delivered through the industry’s most extensive sales and partner network, these dynamic IT solutions will be designed to provide:

Increased business efficiency through solutions that respond to changing business requirements by seamlessly converging server, storage, network and application resources in a highly automated, self-managed environment.

Improved application performance, reliability and availability for some of the industry’s top business applications, Microsoft Exchange Server and Microsoft SQL Server, by creating a deeply optimized “machine” environment. This is achieved through turnkey, pre-integrated server, storage, networking and application packages. These data management and email machines provide “push-button” simplicity in deployment and management.

Enhanced operations through integrated, interoperable virtualization and management tools that allow technology environments to be automatically provisioned, managed and continuously self-tuned.  Through the integration of HP Insight Software, HP Business Technology Optimization software and Microsoft System Center with Microsoft Hyper-V Server, enterprise customers use a unified management solution to automate application deployment along with infrastructure-to-application monitoring. This integration also delivers power and performance optimization, while ensuring interoperability in a heterogeneous datacenter environment.

— Investment protection and low total cost of ownership, enabling customers to deploy systems with confidence. The joint solutions are built on industry standards and designed to utilize existing data center investments, all managed through a common framework. This approach is designed to enable customers to integrate private or public cloud computing models as their business requires. HP and Microsoft will collaborate on the Windows Azure platform, with HP offering services, and Microsoft continuing to invest in HP hardware for Windows Azure infrastructure.

The new infrastructure-to-application model from HP and Microsoft will be delivered as integrated offerings for large, heterogeneous datacenter environments as well as through solutions designed for small and midsized businesses. Solutions are available immediately, with new offerings being introduced throughout the next three years.

 

http://www.microsoft.com/presspass/press/2010/jan10/01-13InfToAppPR.mspx

Implementing a WCF SOAP Client that uses Basic Authentication at first request.

Friday, November 20, 2009 14:52
Posted in category Web

If you have to consume a Web Service that requires Basic Authentication, the normal flow of things is that the first request the client makes is unauthenticated. The server then response with an HTTP 401 response (‘Authentication required’). The client then sends the credentials to the server and the SOAP request goes through.

That is the NORMAL way of things. But there are web services out there that require the credentials to bent sent at the first request. If you use Visual Studio to create a consumer, you will run into problems.

Many have tried to get around this issue by setting the PreAuthenticate property of the WebClientProtocol to ‘true’. This does NOT mean that the credentials are sent at the first request. It merely means that every request after the initial ‘handshake’ has completed will have the authentication header in place. Yet, the FIRST connection will still be tried without any credentials or authentication headers. Hence this does NOT solve the problem.

What you need to do, is, first, add the reference to the service as a Web Reference, not a Service Reference. After Visual Studio creates the proxy class, create another partial class of that proxy class that overrides the GetWebRequest(Uri uri) method.

From within that method, you can then take the HttpWebRequest object and manually add the authentication header.

Here’s an example;

 1:  public partial class api : System.Web.Services.Protocols.SoapHttpClientProtocol
 2: {
 3:  protected override System.Net.WebRequest GetWebRequest(Uri uri)
 4: {
 5: HttpWebRequest request = (HttpWebRequest)base.GetWebRequest(uri);
 6:  if (PreAuthenticate)
 7: {
 8: NetworkCredential networkCredentials = Credentials.GetCredential(uri, "Basic");
 9:  if (networkCredentials != null)
 10: {
 11:  byte[] credentialBuffer = new UTF8Encoding().GetBytes(networkCredentials.UserName + ":" + networkCredentials.Password);
 12: request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(credentialBuffer);
 13: }
 14:  else
 15: {
 16:  throw new ApplicationException("No network credentials");
 17: }
 18: }
 19:  return request;
 20: }
 21: }

Now this is in place, you will send the authentication header at the first request. Since this implementation is using the credentials from the WebClientProtocol, you will be required to set these in advance. But I guess you were doing that anyways. Furthermore, I chose to only do the pre-authentication if the PreAuthenticate property was set to true.

So if you want to consume this service, this is how you would initiate it;

 1: api client = new api();
 2: client.PreAuthenticate = true;
 3: client.Credentials = new NetworkCredential("username", "password");


Good luck!

Creating and using development certificates for use with a self-hosted WCF Service.

Friday, November 20, 2009 8:49
Posted in category Web, Windows

This quick how-to shows you how to create and use certificates in a development environment for use with a self-hosted WCF service. This means that the WCF service is not hosted with IIS, but runs, for example, as a Windows Service.

We will use the makecert.exe tool that ships with the Microsoft Windows SDK. The Windows SDK is available as a free download from Microsoft.

First, we create a root certificate that we can use to ‘sign’ our development certificate. To do so, we use makecert.exe. After installing the Windows SDK, makecert.exe should be available in a directory like C:\Program Files\Microsoft SDKs\Windows\v7.0A\bin. (Depending on the version installed.)

Use the following command to create the certificate;

makecert -n “CN=RootCATest” -r -sv RootCATest.pvk RootCATest.cer

image

I won’t be using a password in this development environment, but your free to do so. I’m clicking ‘None’ here.

You should see this notice;

Succeeded

After the certificate has been created, you can create the certificate revocation list by using this command;

makecert -crl -n “CN=RootCATest” -r -sv RootCATest.pvk RootCATest.crl

Again, you should see this notice;

Succeeded

Now you have to import the 2 certificates you just created in the certificate store of your computer;

  1. Click Start and then click Run. In the command line, type MMC and then click OK.
  2. In the Microsoft Management Console, on the File menu, click Add/Remove Snap-in.
  3. In the Add Remove Snap-in dialog box, click Add.
  4. In the Add Standalone Snap-in dialog box, select Certificates and then click Add.
  5. In the Certificates snap-in dialog box, select the Computer account radio button because the certificate needs to be made available to all users, and then click Next.
  6. In the Select Computer dialog box, leave the default Local computer: (the computer this console is running on) selected and then click Finish.
  7. In the Add Standalone Snap-in dialog box, click Close.
  8. In the Add/Remove Snap-in dialog box, click OK.
  9. In the left pane, expand the Certificates (Local Computer) node, and then expand the Trusted Root Certification Authorities folder.
  10. Under Trusted Root Certification Authorities, right-click the Certificates subfolder, select All Tasks, and then click Import.
  11. On the Certificate Import Wizard welcome screen, click Next.
  12. On the File to Import screen, click Browse.
  13. Browse to the location of the signed Root Certificate Authority RootCATest.cer file created earlier, select the file, and then click Open.
  14. On the File to Import screen, click Next.
  15. On the Certificate Store screen, accept the default choice and then click Next.
  16. On the Completing the Certificate Import Wizard screen, click Finish.
  17. Under Trusted Root Certification Authorities, right-click the Certificates subfolder, select All Tasks, and then click Import.
  18. On the Certificate Import Wizard welcome screen, click Next.
  19. On the File to Import screen, click Browse.
  20. In Files of Type, select Certificate Revocation List.
  21. Browse to the location of the signed Root Certificate Authority RootCATest.crl created earlier, select the file, and then click Open.
  22. On the File to Import screen, click Next.
  23. On the Certificate Store screen, accept the default choice and then click Next.
  24. On the Completing the Certificate Import Wizard screen, click Finish.

The root certificate and the revocation list are now installed on your computer. You can now create a ‘normal’ certificate that your WCF service can use;

makecert -sk MyKeyName -iv RootCATest.pvk -n “CN=tempCert” -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe

After the certificate is created, you should see “Succeeded”.

Now, locate the thumbprint of this certificate through the MMC you used to import the root certificates. Open Certificates, Personal, Certificates and locate the created certificate on the right side;

image

Double-click on the certificate to open it and select the tab ‘Details’.

In the Details tab, under ‘Field’ select the ‘Thumbprint’ (at the bottom).

image

Copy the Thumbprint value to notepad or something and remove all the spaces.

So my “a4 c5 de 1d 2f f4 90 a4 e3 01 51 f2 fb da 0e 0c 6d c5 84 b8” becomes “a4c5de1d2ff490a4e30151f2fbda0e0c6dc584b8”.

Now we can bind the certificate to the port that our service uses. Since my service uses port 8000, i will bind the certificate to port 8000 on all interfaces of my machine by using this command;

netsh http add sslcert ipport=0.0.0.0:8000 certhash=a4c5de1d2ff490a4e30151f2fbda0e0c6dc584b8 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

Replace the certhash value with the Thumbprint value you just extracted. The appid isn’t used in this scenario, leave it as in the example.

Now, the certificate has been bound to the port, and you can start using an SSL encrypted connection to your service.

You can configure your binding and behavior as such in the app.config of your service; (other stuff omitted)

 

 

 < baseAddresses>
<
add baseAddress=https://localhost:8000/Service />
</
baseAddresses><

behaviors><

serviceBehaviors>
<
behavior name=ServiceBehavior>
<
serviceMetadata httpGetEnabled=false httpsGetEnabled=true />
<serviceCredentials>
<
serviceCertificate findValue=CN=tempCert />
</serviceCredentials>
</behavior>
</
serviceBehaviors>Good luck.

 

 

10 Random Things you might need to know about Exchange 2010.

Friday, November 13, 2009 22:38
Posted in category Exchange & OCS

Okay, here are just 10 random thoughts that I can come up with and that I had to deal with lately with regards to Exchange 2010. Could very well be I have to expand the list a little in the coming days or weeks.

  1. The only high-availability Exchange 2010 is offering is through the Database Availability Group (or DAG). DAG will work on Exchange 2010 Enterprise Edition and also on the Standard Edition. It does require Windows 2008 x64 or R2 Enterprise Edition.
  2. If you want to go ‘backupless’ Microsoft recommends replicating you databases to at least 2 other nodes in the DAG. You can use a JBOD ("Just-a-bunch-of-disks") configuration with cheap SATA storage in this situation.
  3. Virtualizing Exchange is supported. This goes for ALL roles except the Unified Messaging, or UM, role. Remeber to use Fixed Size VHD’s, SCSI Passthrough disks or iSCSI disks from the client. Last, an Exchange DAG is not supported on a clustered Hyper-V or SVVP (support third-party) installation.
  4. You can install multiple roles on a single server. But remember that you cannot use Network Load Balancing (or NLB) on Client Access Server that is installed on a mailbox server configured in a DAG.
  5. Currently, you cannot access the Personal Archive from anything other then Outlook Web App (the former Outlook Web Access). Outlook 2010 will support the Personal Archive. Microsoft is considering making this available to Outlook 2007 by means of a service pack.
  6. When migrating a large organisation from Exchange 2003 to Exchange 2010, please introduce an Exchange 2007 server first and keep that running. If you do not do this, you can never ever introduce another Exchange 2007 server into the organisation, making possible other Exchange migrations impossible (mergers or aquisitions). In a migration, keep a close look on the CAS and Mailbox servers. Keep an ‘old’ CAS server up and running to access the ‘old’ mailbox servers.
  7. Use only the latest version of the Storage Calculator (currently the E2010 Mailbox Role Calculator – v1.2) to size the mailbox storage. Other versions do not take into account the new large mailboxes and the reduced I/O requirements for Exchange 2010.
  8. Native IPv6 in a DAG is not supported. It does support IPv6, but it requires IPv4.
  9. Don’t put your CAS servers in the DMZ or Perimeter network. Putting a firewall between a CAS and a mailbox server is not supported. In stead, put a reverse proxy (ISA?) in the perimeter network.
  10. Check out the single-item recovery. See what it does, how it works, how it can help you and what the impact is on storage requirements. Single-item recovery is the most common scenario for a restore operation. Single Item Recovery prevents purging of data and provides versioning capability (the ability to retain the unaltered form of the item).

If you need more information on these point, please checkout the Exchange Team Blog at http://msexchangeteam.com or check Microsoft’s TechNet site at http://go.microsoft.com/fwlink/?linkid=132764

Tino