﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>Tom Hundley</title>
    <description>This blog will be used to post technical problems and solutions that we have encountered.</description>
    <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/BlogId/2/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>tom.hundley@elegantsoftwaresolutions.com</managingEditor>
    <webMaster>tom.hundley@elegantsoftwaresolutions.com</webMaster>
    <pubDate>Mon, 08 Sep 2008 09:59:28 GMT</pubDate>
    <lastBuildDate>Mon, 08 Sep 2008 09:59:28 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.4.0.39853</generator>
    <item>
      <title>ASP.Net Password Complexity RegEx</title>
      <description>&lt;p&gt;The "out of the box" password complexity requirements for the ASP.Net Membership system is this:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;7 characters minimum&lt;/li&gt;
    &lt;li&gt;1 symbol character&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A client asked for a more complex password (a common request):&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;8 characters minimum&lt;/li&gt;
    &lt;li&gt;at least 1 number&lt;/li&gt;
    &lt;li&gt;at least 1 lower case&lt;/li&gt;
    &lt;li&gt;at least 1 upper case&lt;/li&gt;
    &lt;li&gt;at least 1 symbol character&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I tested a lot of regular expressions and most of them didn't work.  I finally found one that works well:&lt;/p&gt;
&lt;p&gt;^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).*$&lt;/p&gt;
&lt;p&gt;Simply set the "passwordStrengthRegularExpression" attribute of the provider section in the web.confg to this regular expression and badda bing, you're good to go.  See this &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/ms998347.aspx"&gt;link&lt;/a&gt; for a list of all the attributes in the config.&lt;/p&gt;
&lt;p&gt;You might want to seriously look into using the &lt;a target="_blank" href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/PasswordStrength/PasswordStrength.aspx"&gt;Password Strength Ajax Extender&lt;/a&gt; available from the Ajax Toolkit.  It's really nice and goes a long way to solving your users' password complexity woes.  It's simply to use and you can implement it in a matter of minutes.&lt;/p&gt;
&lt;p&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/37/Default.aspx</link>
      <author>tom.hundley@elegantsoftwaresolutions.com</author>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/37/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=37</guid>
      <pubDate>Tue, 02 Sep 2008 16:15:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=37</trackback:ping>
    </item>
    <item>
      <title>Blog Topics</title>
      <description>&lt;p&gt;I've been asked why I have so many more blogs on Server Operations topics than I do development and coding topics when Elegant Software Solutions is fundamentally a software development shop.  That's actually a good question. &lt;/p&gt;
&lt;p&gt;For now, I'm using the blog to record issues that I run into and the answer isn't &lt;span style="font-size: 9pt; font-family: Arial; mso-fareast-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"&gt;immediately &lt;/span&gt;obvious to me.  It's sort of my own knowledge base / repository and I blog the issues hoping to help other people.  I don't have as many of those stumping points with code as I'm just burning through development busy work right now, so I have less issues to write about.&lt;/p&gt;
&lt;p&gt;This will change eventually.  When my schedule slows down and bit and I'm not working 80 hours a week, I'll have more time to research some of the more bleeding edge technologies and I'll start to blog about my trials and tribulations in that arena.  For example, I'd love to have some time to play around with LINQ and SQLMetal and write a nice article on how the two technologies compare to .NetTiers.  I haven't even had time to read up on the .NetTiers forums / community about how they plan to integrate them in their framework (if then even plan on it).&lt;/p&gt;
&lt;p&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/35/Default.aspx</link>
      <author>tom.hundley@elegantsoftwaresolutions.com</author>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/35/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=35</guid>
      <pubDate>Tue, 26 Aug 2008 16:08:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=35</trackback:ping>
    </item>
    <item>
      <title>Allowing application servers to relay external mail through Exchange 2007</title>
      <description>&lt;p&gt;Often times you'll want an external application server to be able to relay external email through your Exchange server.  For example, in my setup, my DNN servers hosted in my data center use the Exchange 2007 server on my local network as their SMTP server.&lt;/p&gt;
&lt;p&gt;You obviously need to be careful about configuring your server to be an open relay.  Configuring this correctly with Exchange 2007 is easy.&lt;/p&gt;
&lt;ol&gt;
    &lt;li&gt;Create a new Receive Connector&lt;/li&gt;
    &lt;li&gt;Chose Custom as the intended use&lt;/li&gt;
    &lt;li&gt;Specify your Local Network settings and FQND to respond to requests.  The default setting to use all available IPv4 addresses for the local IP addresses is normally fine.&lt;/li&gt;
    &lt;li&gt;*&lt;font color="#ff0000"&gt;**This is the most important Step***.  &lt;strong&gt;REMOVE &lt;/strong&gt;the default entry of 0.0.0.0-255.255.255.255 in the Remote Network Settings.  Failure to do this will result in your server being an Open Relay and you'll quickly find yourself blacklisted, and that's a huge can of worms you do not want to deal with.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;Add the IP address(es) of your Remote Server.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;After creating the Receive Connector, go to the Permission Groups tab.  Check "Exchange Servers" only.  Everything else should be unchecked.&lt;/font&gt;&lt;/li&gt;
    &lt;li&gt;&lt;font color="#000000"&gt;Click on the Authentication tab and click "Externally Secured".  Everything else should be unchecked.&lt;/font&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;font color="#000000"&gt;That's it- assuming your send connector is configured properly for external email, your application server will now be able to connect and relay external mail through your Exchange 2007 server.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;&lt;font color="#000000"&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions&lt;/font&gt;&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/34/Default.aspx</link>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/34/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=34</guid>
      <pubDate>Tue, 26 Aug 2008 15:51:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=34</trackback:ping>
    </item>
    <item>
      <title>Outlook Anywhere Connection Problem</title>
      <description>&lt;p&gt;I had every intention of detailing my troubles getting Exchange 2007 setup with Server 2008 and ISA 2006.  I was so frustrated by the end of the process and so relieved when I finally got everything to work, I stopped thinking about it and forgot to post my experiences.&lt;/p&gt;
&lt;p&gt;I wanted to log this one piece of information because it was the hardest thing to troubleshoot and I couldn't have done it without finding some needle in the haystack posts.&lt;/p&gt;
&lt;p&gt;Problem:&lt;br /&gt;
Once I finally got most of the functionality working, the last piece I was stuck on was getting Outlook Anywhere to connect to the Directory services.  The Mail connection would work fine, but not the Directory connections, so when would get a failure when connecting to things like Contacts, Tasks, etc.&lt;/p&gt;
&lt;p&gt;Solution:&lt;br /&gt;
It turns out that it was a bug in the TCP/IP 6 drivers on Server 2008.  If you disable TCP/IP 6, everything started worked perfectly.  It's possible that this has been fixed by now, and if not, one would imagine that it definitely would be the near future, but here are some details about it.&lt;/p&gt;
&lt;p&gt;Reference Posts:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blog.aaronmarks.com/?p=65"&gt;http://blog.aaronmarks.com/?p=65&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2894199&amp;SiteID=17"&gt;http://forums.microsoft.com/TechNet/ShowPost.aspx?PostID=2894199&amp;SiteID=17&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.digwin.com/view/outlook-anywhere-is-broken-on-ipv6-in-windows-server-2008"&gt;http://www.digwin.com/view/outlook-anywhere-is-broken-on-ipv6-in-windows-server-2008&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I'm actually posting this guy's blog on mine in the off chance he took his site down... it was just so helpful that I'd hate to lose the information!&lt;/p&gt;
&lt;p&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions&lt;/p&gt;
&lt;p&gt;The following post was written by &lt;a href="http://blog.aaronmarks.com/?p=65"&gt;Aaron Marks&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;As an IT admin it will happen to all of us at some point; there will be that problem that seems like you are 10 minutes away from fixing that quickly turns into 10 hours and then 2, 3, even 5+ days.  Before you know it, you have spent a week with nearly zero sleep and a lot of caffeine and then you finally realize that you are not any further along than when you started.  I spent the last week banging my head up against a wall trying to get a clients new Windows Server 2008 and Exchange 2007 SP1 environment up and running, only to find out that Microsoft has a crippling bug in Windows Server 2008 that won’t allow Outlook Anywhere (a.k.a. RPC over HTTP) to run in its default configuration.&lt;/p&gt;
&lt;p&gt;The most unfortunate part about this is that Microsoft is still yet to release any information publicly about this problem, which is really sad because they generally do such a great job of at least posting limitations of their products on many of their wonderful blogs.  I had to search the Internet and eventually found articles that led me in the right direction but I was never able to find a blog/article that outlined the exact steps that I used to fix/diagnose Outlook Anywhere which is why I really felt the need to write this post.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
The basis of the problem is that Windows Server 2008 (like Windows Vista) gives precedence to IPv6 over IPv4 and this is especially a problem if you have your mailbox and CAS on the same server (the normal default configuration).  Let me start from the beginning though in describing how the bug can be replicated, diagnosed, and then fixed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Replication&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;Normally, if you wanted to start using Outlook Anywhere on an Exchange 2007/Windows 2008 Server, the first command you would enter into a command prompt would be:&lt;/p&gt;
&lt;p&gt;ServerManagerCmd -i RPC-over-HTTP-proxy&lt;/p&gt;
&lt;p&gt;After this you would wait a few minutes while the server installs the RPC over HTTP proxy into IIS 7.  I generally restart the server at this point even though you don’t have to.&lt;/p&gt;
&lt;p&gt;The most important part of this next step is to be patient (specifically, about 15 minutes).  Now you need to actually enable Outlook Anywhere using either the Exchange Management Console or the Exchange Management Shell.  I prefer the shell and it is easier to show on the blog so this is approximately what the command should look like:&lt;/p&gt;
&lt;p&gt;[PS] C:\&gt;Enable-OutlookAnywhere -Server host.domain.tld -DefaultAuthenticationMethod:Basic -SSLOffloading:$false&lt;/p&gt;
&lt;p&gt;Now you have to wait about 15 minutes for the server to register an Event ID 3006 in the Application log:&lt;/p&gt;
&lt;p&gt;Log Name:      Application&lt;br /&gt;
Source:        MSExchange RPC Over HTTP Autoconfig&lt;br /&gt;
Date:          3/25/2008 1:26:55 AM&lt;br /&gt;
Event ID:      3006&lt;br /&gt;
Task Category: General&lt;br /&gt;
Level:         Information&lt;br /&gt;
Keywords:      Classic&lt;br /&gt;
User:          N/A&lt;br /&gt;
Computer:      host.domain.tld&lt;br /&gt;
Description:&lt;br /&gt;
The Outlook Anywhere feature has been enabled. The ValidPorts registry setting has been modified to reflect this change.&lt;br /&gt;
New value:     HOST:6001-6002; HOST:6004;host.domain.tld:6001-6002; host.domain.tld:6004&lt;/p&gt;
&lt;p&gt;Now set up an Outlook 2007 client and connect it to the mailbox using the correct settings for Outlook Anywhere access (Autodiscover should take care of this for you if you have it set up properly).  Then at this point everything should be working, right? WRONG! Don’t make the same mistake I did and keep trying to fix something that just can’t be fixed (unless you work and Microsoft and if you do please contact me via the contact page so we can work out a hotfix together).  You can now go to your Outlook icon in the system tray and ctrl+click on it to bring up the “Connection Status” window.  In it you will notice that things aren’t connecting exactly as they should (YMMV from the picture below since I took this after-the-fact just trying to reproduce what you may see):&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Diagnosis&lt;/u&gt;&lt;/strong&gt;:&lt;/p&gt;
&lt;p&gt;This is the part that drove me crazy and I honestly couldn’t have diagnosed it on my own if it weren’t for some pointers on the Internet which I want to cite here and here.  I’d suggest you read those two links for starters since they are where I learned about the problem from, but to be honest, the reason why it took me so long to find these posts was because I was beyond baffled and was originally looking down the completely wrong paths for a solution.  I could go on and on explaining all of the things that I thought were leading to the problem, but it would be a waste of time since the bug is so obvious now.&lt;/p&gt;
&lt;p&gt;The problem we are experiencing here is that the RPC over HTTP proxy isn’t able to communicate over port 6004 with the localhost because there is a bug that is causing the Windows Server 2008 to not listen for connections on port 6004 via IPv6.  This can be confirmed by pulling up a command prompt and typing:&lt;/p&gt;
&lt;p&gt;netstat -a -n&lt;/p&gt;
&lt;p&gt;The netstat command will return a bunch of source/destination IP addresses and ports, but what is really important to us is the ports relevant to the RPC over HTTP proxy which will be these parts of the output as seen below:&lt;/p&gt;
&lt;p&gt;TCP 0.0.0.0:6001 0.0.0.0:0 LISTENING&lt;br /&gt;
TCP 0.0.0.0:6002 0.0.0.0:0 LISTENING&lt;br /&gt;
TCP 0.0.0.0:6004 0.0.0.0:0 LISTENING&lt;br /&gt;
TCP [::]:6001 [::]:0 LISTENING&lt;br /&gt;
TCP [::]:6002 [::]:0 LISTENING&lt;/p&gt;
&lt;p&gt;As we can see, the server is for some reason not listening on port 6004 via the IPv6 loopback.  This tells a couple of things, but most importantly, someone at Microsoft really screwed up by letting this one out the door without fixing it (especially since it was known about in the RC stage).  This also tells us that we can fix this problem by disabling IPv6 entirely.&lt;/p&gt;
&lt;p&gt;You can confirm that the server isn’t listening on port 6004 by telnet’ing to localhost 6004 via (FYI, the telnet client/server are not default features in Windows 2008):&lt;/p&gt;
&lt;p&gt;telnet localhost 6004&lt;/p&gt;
&lt;p&gt;Fix:&lt;/p&gt;
&lt;p&gt;IPv6 is disabled the same way in Windows Server 2008 as it is in Windows Vista, but just for good measure, I recommend that you also uncheck IPv6 TCP/IP on your NIC through the “Manage Network Connections” control panel. But to truly disable IPv6 you need to open regedit and navigate to:&lt;/p&gt;
&lt;p&gt;HKLM\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters&lt;/p&gt;
&lt;p&gt;Then you will need to add a 32-bit D-WORD with the name DisabledComponents and give it a value of 0xff. This will disable IPv6 on all interfaces and all tunneling interfaces but unfortunately it still doesn’t disable the loopback interface. In order to disable the loopback interface you will need to comment out the following line in your hosts file under %SYSTEMROOT%\System32\drivers\etc\:&lt;/p&gt;
&lt;p&gt;::1 localhost&lt;/p&gt;
&lt;p&gt;…by changing it to:&lt;/p&gt;
&lt;p&gt;# ::1 localhost&lt;/p&gt;
&lt;p&gt;…and while you’re at it you may as well add a couple more lines to directly map your HOSTNAME and FQDN to your IPv4 address of the Exchange server.  In the end your hosts file should look something like this:&lt;/p&gt;
&lt;p&gt;10.0.0.10 host.domain.tld&lt;br /&gt;
10.0.0.10 HOST&lt;br /&gt;
127.0.0.1 localhost&lt;br /&gt;
# ::1 localhost&lt;/p&gt;
&lt;p&gt;I would now recommend rebooting your server so that the registry changes take effect.  Once your server has rebooted you should now be able to run ipconfig without seeing all of the extra IPv6 tunneling interfaces; the only thing that should be visible is the IPv4 network interface. You should also now be able to successfully issue a:&lt;/p&gt;
&lt;p&gt;telnet localhost 6004&lt;/p&gt;
&lt;p&gt;The final and most important confirmation that this all worked will be to log on to a client workstation again and open up the connection status in Outlook 2007 to make sure that both the Directory and Mail are connected via RPC over HTTPS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Side Notes:&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I have been unsuccessful at setting up NTLM passthrough authentication in Outlook Anywhere on Windows Server 2008. For some reason NTLM continually causes Test-OutlookWebServices to fail the RPC test, but when I Set-OutlookAnywhere to -DefaultAuthentication:Basic I don’t have any problems other than that users complain about having to enter their password every time Outlook opens. If anyone has any advice on this topic, please comment.&lt;/p&gt;
&lt;p&gt;Now get off the caffeine and get some sleep.&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/33/Default.aspx</link>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/33/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=33</guid>
      <pubDate>Mon, 18 Aug 2008 04:17:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=33</trackback:ping>
    </item>
    <item>
      <title>Same Distribution Group Name for Multiple Domains</title>
      <description>&lt;p&gt;&lt;strong&gt;&lt;u&gt;Problem&lt;/u&gt;&lt;/strong&gt;:&lt;br /&gt;
Total Care Websites is hosting email for several companies and I needed to figure out how to create the same distro name for difference domains.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;u&gt;Easy Solution:&lt;br /&gt;
&lt;/u&gt;&lt;/strong&gt;The Display Name and Alias need to be unqiue, but the SMTP addresses don't have to be the same as the alias.  The default EAP does this so it's easy to think that the SMTP needs to be the alias... You can control this with the email address policies, but the bottom line is this:&lt;/p&gt;
&lt;p&gt;If you need to have two distros:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://elegantsoftwaresolutions.commailto:sales@companyA.com"&gt;sales@companyA.com&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://elegantsoftwaresolutions.comhttp://elegantsoftwaresolutions.commailto:sales@companyB.com"&gt;sales@companyB.com&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Simply create two Distribution groups called:&lt;/p&gt;
&lt;ul&gt;
    &lt;li&gt;CompanyASales&lt;/li&gt;
    &lt;li&gt;CompanyBSales&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then modify the SMTP addresses and add &lt;a href="http://elegantsoftwaresolutions.commailto:sales@comanyA.com"&gt;sales@comanyA.com&lt;/a&gt; to the first and &lt;a href="http://elegantsoftwaresolutions.comhttp://elegantsoftwaresolutions.commailto:sales@companyB.com"&gt;sales@companyB.com&lt;/a&gt; to the second.&lt;/p&gt;
&lt;p&gt;Like I said, with some EAP tweaking you can create the policies to that you don't need to manually change the SMTP address.  You'll also want to create some Address Lists and Offline Address Books for each company as well so the users in each company don't see the other contacts...&lt;br /&gt;
 &lt;br /&gt;
I think there are much better ways of doing this, but with my limited Exchange experience, this is the first way I came up with that works.&lt;br /&gt;
 &lt;br /&gt;
This guy wrote a decent &lt;a href="http://www.redline-software.com/eng/support/articles/msexchange/2007/shared-hosting-exchange2007-part1.php"&gt;article&lt;/a&gt; on the subject.  &lt;br /&gt;
 &lt;br /&gt;
Tom Hundley&lt;br /&gt;
Elegant Software Solutions, LLC&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/32/Default.aspx</link>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/32/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=32</guid>
      <pubDate>Mon, 18 Aug 2008 04:06:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=32</trackback:ping>
    </item>
    <item>
      <title>Exchange Local Continuous Replication</title>
      <description>&lt;p&gt;&lt;span style="font-size: 9pt; font-family: "&gt;I have to give a shout out to David Sandor or showing me about the Local Continuous Replication (LCR) feature of Exchange 2007.  This is a huge load off my mind since I didn't yet have any backups in place for the new environment.  I've been meaning to install Microsoft Data Protection Management Server to use that for backups and disaster recovery (and I probably still will), but I simply haven't had time to get to it.  Backup Exec licenses are very expensive- not to mention the cost of tape drives and tapes.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 9pt; font-family: "&gt;Local Continuous Replication give me a great and very inexpensive way to quickly get a modicum of disaster recovery implemented for my Exchange environment.  I simply point the Local Continuous Replication paths to my file server and Exchange will asynchronously replicate everything in the Storage database to the non-production volume.  So in a production drive failure, all I need to do is rebuild the server and restore the Local Continuous Replication database.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 9pt; font-family: "&gt;Local Continuous Replication is certainly not a full disaster recovery solution or backup plan, but with so limited time and so limited resources, I can now at least sleep at night knowing that the company's email and contacts are safely backup.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 9pt; font-family: "&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/31/Default.aspx</link>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/31/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=31</guid>
      <pubDate>Fri, 15 Aug 2008 14:42:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=31</trackback:ping>
    </item>
    <item>
      <title>KB948109 Security Hotfix Fails</title>
      <description>&lt;p&gt;&lt;span style="font-size: 7pt; font-family: "Arial","sans-serif""&gt;A security update from MS broke the production server for the first time in who knows how long.  The automatic installation of the hotfix for KB948109 failed and messed the SQL services up.  I rebooted and tried to reinstall it and the same thing happened, although this time simply restarting SQL worked to fix it.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 7pt; font-family: "Arial","sans-serif""&gt;I'm going to look into this a bit later and get it fixed on but wanted to throw this up on the blog.  It also brought to light that I need to get a monitoring system put back on this server.  I used Alert Site in the past and they were great and were reasonably priced, so I'll probably go with them again.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 7pt; font-family: "Arial","sans-serif""&gt;Anyway, cheers for now...&lt;br /&gt;
&lt;br /&gt;
Tom Hundley&lt;br /&gt;
Elegant Software Solutions, LLC&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/27/Default.aspx</link>
      <author>tom.hundley@elegantsoftwaresolutions.com</author>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/27/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=27</guid>
      <pubDate>Sun, 13 Jul 2008 02:19:00 GMT</pubDate>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=27</trackback:ping>
    </item>
    <item>
      <title>Telerik Grid for ASP.Net Ajax: Selecting Page and Row after Insert</title>
      <description>&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Arial"&gt;The Telerik RadGrid automatically goes to the last page of the grid when inserting records, which is fine you don't care about seeing the newly inserted item.  This code will show you how to select the page and row which was just created.  The commented code at the bottom will also show you how to open the record in edit mode in cases where you need the page opened in such a manner.  &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Arial"&gt;Simply subscribe to the PreRender event of the grid, enumerate the datasource directly to get the new records row index so that you can determine the page index and there you go.  Note that the Items collections on all of the grid objects only have the total number of items in that page, which is why you need to enumerate the datasource.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;        if (Session[sessionObjectToFind] != null)&lt;br /&gt;
        {&lt;br /&gt;
            Guid storeRefId = new Guid(Session[sessionObjectToFind].ToString());&lt;br /&gt;
            Session[sessionObjectToFind] = null;&lt;/p&gt;
&lt;p&gt;            int pageIndex = 0;&lt;br /&gt;
            int rowIndex = 0;&lt;/p&gt;
&lt;p&gt;            for (int i = 0; i &lt; ((VList&lt;storeflat&gt;&lt;/storeflat&gt;)rgStores.DataSource).Count; i++)&lt;br /&gt;
            {&lt;br /&gt;
                if (((VList&lt;storeflat&gt;&lt;/storeflat&gt;)rgStores.DataSource)[i].StoreRefId == storeRefId)&lt;br /&gt;
                {&lt;br /&gt;
                    rowIndex = i;&lt;br /&gt;
                    pageIndex = Convert.ToInt32(Decimal.Truncate((rowIndex / rgStores.PageSize)));&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;/p&gt;
&lt;p&gt;            rgStores.CurrentPageIndex = pageIndex;&lt;br /&gt;
            rgStores.Rebind();&lt;/p&gt;
&lt;p&gt;            rgStores.SelectedIndexes.Add(rgStores.MasterTableView.FindItemByKeyValue("StoreRefId", storeRefId).ItemIndex);&lt;br /&gt;
        }&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;font face="Arial"&gt;Oh, one last thing- you need to have some sorting logic applied to your datasource in your grid's NeeddDataSource event handler.  This is an example:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;        if (rgStores.MasterTableView.SortExpressions.Count == 0)&lt;br /&gt;
        {&lt;br /&gt;
            stores.Sort("DivisionName, StoreName");&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            string sortExpression = string.Empty;&lt;br /&gt;
            for (int i = 0; i &lt; rgStores.MasterTableView.SortExpressions.Count; i++)&lt;br /&gt;
            {&lt;br /&gt;
                sortExpression += rgStores.MasterTableView.SortExpressions[i].ToString();&lt;br /&gt;
                if (i + 1 &lt; rgStores.MasterTableView.SortExpressions.Count)&lt;br /&gt;
                {&lt;br /&gt;
                    sortExpression += ",";&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            stores.Sort(sortExpression);&lt;br /&gt;
        }&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt"&gt;        rgStores.DataSource = stores;&lt;br /&gt;
    }&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 10pt"&gt;  &lt;/p&gt;
&lt;p&gt;Tom Hundley,&lt;br /&gt;
Elegant Software Solutions, LLC&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/26/Default.aspx</link>
      <author>tom.hundley@elegantsoftwaresolutions.com</author>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/26/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=26</guid>
      <pubDate>Tue, 08 Jul 2008 20:55:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=26</trackback:ping>
    </item>
    <item>
      <title>Enable Remote HTTP Testing of Webservices</title>
      <description>&lt;p&gt;Remote testing of web services via HTTP was diabled by default after .Net 1.0, so now you can only invoke test methods with your browser on the server. &lt;br /&gt;
&lt;br /&gt;
Should you ever find the need to enable it again, add the following to the system.Web section of your web.config:&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'; mso-no-proof: yes"&gt;webServices&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;  &lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'; mso-no-proof: yes"&gt;protocols&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;    &lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'; mso-no-proof: yes"&gt;add&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;HttpPost&lt;/span&gt;"&lt;span style="color: blue"&gt; /&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;    &lt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'; mso-no-proof: yes"&gt;add&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt; &lt;/span&gt;&lt;span style="font-size: 10pt; color: red; font-family: 'Courier New'; mso-no-proof: yes"&gt;name&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;=&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;"&lt;span style="color: blue"&gt;HttpGet&lt;/span&gt;"&lt;span style="color: blue"&gt; /&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;  &lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: 'Courier New'; mso-no-proof: yes"&gt;protocols&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;webServices&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;font face="Arial" color="#000000"&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions, LLC&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/25/Default.aspx</link>
      <author>tom.hundley@elegantsoftwaresolutions.com</author>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/25/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=25</guid>
      <pubDate>Sun, 15 Jun 2008 05:26:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=25</trackback:ping>
    </item>
    <item>
      <title>Truncate SQL Transaction Log and Shrink Database</title>
      <description>&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;font face="Arial" color="#000000"&gt;I only need to do this every so often, but I always forget how to and end up looking it up.  Thus, I'm posting it here for reference.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt; &lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;USE&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; DatabaseName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt;GO&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="margin: 0in 0in 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: 'Courier New'; mso-no-proof: yes"&gt;BACKUP&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: 'Courier New'; mso-no-proof: yes"&gt; &lt;span style="color: fuchsia"&gt;LOG&lt;/span&gt; &lt;span style="color: gray"&gt;&lt;&lt;/span&gt;DatabaseName&lt;span style="color: gray"&gt;&gt;&lt;/span&gt; &lt;span style="color: blue"&gt;WITH&lt;/span&gt; &lt;span style="color: blue"&gt;TRUNCATE_ONLY&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 10pt"&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;DBCC&lt;/span&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt; SHRINKFILE&lt;span style="color: gray"&gt;(&lt;&lt;/span&gt;TransactionLogName&lt;span style="color: gray"&gt;&gt;,&lt;/span&gt; 1&lt;span style="color: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;span style="color: gray"&gt;
&lt;p&gt;&lt;span style="font-size: 10pt; color: blue; line-height: 115%; font-family: 'Courier New'; mso-no-proof: yes"&gt;&lt;font face="Arial" color="#000000"&gt;Tom Hundley&lt;br /&gt;
Elegant Software Solutions, LLC&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <link>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/24/Default.aspx</link>
      <author>tom.hundley@elegantsoftwaresolutions.com</author>
      <comments>http://elegantsoftwaresolutions.com/Blogs/tabid/816/EntryID/24/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://elegantsoftwaresolutions.com/Default.aspx?tabid=816&amp;EntryID=24</guid>
      <pubDate>Sun, 15 Jun 2008 01:48:00 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://elegantsoftwaresolutions.com/DesktopModules/Blog/Trackback.aspx?id=24</trackback:ping>
    </item>
  </channel>
</rss>