Blogs
March 11, 2010
Filter by Category
Blogs
Author: Thomas Hundley Created: 4/21/2007 12:21 AM
This blog will be used to post technical problems and solutions that we have encountered.

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. 

For now, I'm using the blog to record issues that I run into and the answer isn't immediately 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.

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...

Read More »

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.

You obviously need to be careful about configuring your server to be an open relay.  Configuring this correctly with Exchange 2007 is easy.

Create a new Receive Connector Chose Custom as the intended use 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. ***This is the most important Step***.  REMOVE 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. Add the IP address(es) of your Remote Server. After...

Read More »

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.

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.

Problem: 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.

Solution: 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...

Read More »

Problem: 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.

Easy Solution: 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:

If you need to have two distros:

sales@companyA.com sales@companyB.com  Simply create two Distribution groups called:

CompanyASales CompanyBSales Then modify the SMTP addresses and add sales@comanyA.com to the first and sales@companyB.com to the second.

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......

Read More »

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. 

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.

Local Continuous Replication...

Read More »

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.

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.

Anyway, cheers for now... Tom Hundley Elegant Software Solutions, LLC

...

Read More »

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. 

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.

        if (Session[sessionObjectToFind] != null)         {             Guid storeRefId = new Guid(Session[sessionObjectToFind].ToString());             Session[sessionObjectToFind] = null;

            int pageIndex = 0;             int rowIndex = 0;

            for...

Read More »

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.  Should you ever find the need to enable it again, add the following to the system.Web section of your web.config:

webServices>   protocols>     add name="HttpPost" />     add name="HttpGet" />   protocols> webServices>

Tom Hundley Elegant Software Solutions, LLC

 

...

Read More »

 

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.

 

 

USE DatabaseName

GO

BACKUP LOG DatabaseName> WITH TRUNCATE_ONLY

DBCC SHRINKFILE(TransactionLogName>, 1)

Tom Hundley Elegant Software Solutions, LLC



...

Read More »

Here is a script to rebuild all of your indexes on your database.  I find that indexes are often ignored once an application moves to production.  It's a good idea to evaluate your usage patterns and setup automated maintenance jobs to proactively rebuild indexes before fragmentation has a chance to adversely effect performance.  This is especialy important if you are using guids as primary keys and don't move the clustered index to a more logically sequential column. 

 

 -- Show fragmentation for all tables EXEC sp_MSforeachtable @command1="print '?' DBCC SHOWCONTIG('?')"



 

--Rebuild all indexes (note this method locks the tables while the indexes are being rebuilt)

USE [myDatabase]

 

DECLARE @TableName varchar(255)

 

DECLARE TableCursor CURSOR FOR

SELECT table_name FROM information_schema.tables

WHERE table_type = 'base table'

 

OPEN TableCursor

 

FETCH NEXT FROM TableCursor INTO @TableName

...

Read More »

Home  |  Clients  |  Blogs  |  Contact Us
Copyright© Elegant Software Solutions, LLC