By Tom Hundley on
11/8/2008 3:59 PM
After installing SP1 for Visual Studio 2008 Team Suite, the functionality of Database Edition (data and schema compare) surprisngly doesn't work with SQL Server 2008. Here is the fix:
http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&displaylang=en#filelist
Tom Hundley
Elegant Software Solutions
|
By Tom Hundley on
11/7/2008 9:38 PM
If you need to remove a column from a Telerik RadGrid at runtime, subscribe to the grid's DataBound event, find the column by its unique name, and set its display property to false. This is the correct way to do this without breaking the filter functionality. For a long time I was subscribing to the grid's ItemDataBound event and hiding each dataitem for the column- only now did I realize that the filter was broken by doing it that way.
Example
protected void rgPartDispositionHistory_DataBound(object sender, EventArgs e)
{
rgPartDispositionHistory.MasterTableView.Columns.FindByUniqueName("PeopleSoftId").Display = isTwtc;
}
Tom Hundley
Elegant Software Solutions
|
By Tom Hundley on
9/2/2008 11:15 AM
The "out of the box" password complexity requirements for the ASP.Net Membership system is this:
7 characters minimum
1 symbol character
A client asked for a more complex password (a common request):
8 characters minimum
at least 1 number
at least 1 lower case
at least 1 upper case
at least 1 symbol character
I tested a lot of regular expressions and most of them didn't work. I finally found one that works well:
^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[\W]).*$
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 link for a list of all the attributes in the config.
You might want to seriously look into using the Password Strength Ajax Extender 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...
Read More »
|
By Tom Hundley on
8/26/2008 11:08 AM
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 »
|
By Tom Hundley on
8/26/2008 10:51 AM
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 »
|
By Tom Hundley on
8/17/2008 11:17 PM
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 »
|
By Tom Hundley on
8/17/2008 11:06 PM
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 »
|
By Tom Hundley on
8/15/2008 9:42 AM
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 »
|
By Thomas Hundley on
7/12/2008 9:19 PM
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 »
|
By Tom Hundley on
7/8/2008 3:55 PM
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 »
|