﻿<?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>Software Development</title>
    <description>Many years I have wanted to post up code examples and things that I have learned. I just have not wanted to write my own blogging software, and I didnt want to use someone elses. </description>
    <link>http://www.badassride.com/PublicBlog/tabid/358/BlogId/10/Default.aspx</link>
    <language>en-US</language>
    <managingEditor>travis@lvfbody.com</managingEditor>
    <webMaster>travis@lvfbody.com</webMaster>
    <pubDate>Thu, 11 Mar 2010 16:58:06 GMT</pubDate>
    <lastBuildDate>Thu, 11 Mar 2010 16:58:06 GMT</lastBuildDate>
    <docs>http://backend.userland.com/rss</docs>
    <generator>Blog RSS Generator Version 3.5.0.35082</generator>
    <item>
      <title>Plinqo can save you valuable time developing your .net database projects</title>
      <description>&lt;p&gt;For many years, I have been developing applications that require database development, and a data tier to perform the basic &lt;a href="http://en.wikipedia.org/wiki/Create,_read,_update_and_delete" target="_blank"&gt;CRUD&lt;/a&gt; operations. As many of you who read my blog may also be doing the same thing.   The .net developer is the master at data manipulation.   We can do anything.   We just like to spend all our time on the simple things that could be automated. That's where Plinqo comes in.&lt;/p&gt; &lt;p&gt;One thing that we do, that drive us nuts, is spending time on the same repetitive tasks.  Yes, the CRUD operations usually are the same thing over and over.   Another thing that drives us nuts is when there is a schema change. What do you do with your old data objects?  Well, &lt;a href="http://plinqo.com" target="_blank"&gt;Plinqo&lt;/a&gt; will solve this issue for you.&lt;/p&gt; &lt;p&gt;Not to long ago, I was researching a replacement for the old school methods we were using.  I used to create XSD datasets and then I had used designed a template &lt;a href="http://www.codesmithtools.com/" target="_blank"&gt;CodeSmith&lt;/a&gt; to generate a business object that performed the basic CRUD operations against those datasets needed in my app.  Although I thought this was an automated way of doing things, we coudl take it a step further. I still had to do everything by hand, and changes meant I had to regenerate many of the same classes I had been using.  While researching an alternative, I was testing all the big ones like &lt;a href="https://www.hibernate.org/343.html" target="_blank"&gt;nHibernate&lt;/a&gt;, and even went back to some stuff like &lt;a href="http://www.lhotka.net/cslanet/" target="_blank"&gt;CSLA&lt;/a&gt;.   In the end, the absolute fastest and most effective method of doing what I wanted to do was using &lt;a href="http://plinqo.com/" target="_blank"&gt;plinqo&lt;/a&gt;.  &lt;/p&gt; &lt;p&gt;This will warrant a demonstration of how quick and easy it is to get setup.&lt;/p&gt; &lt;p&gt;1.) Design your database. For this sample, I put together a very simple database for something I am currently testing.  &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb.png" width="198" height="490"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;2.) Loadup Plinqo in CodeSmith.  CodeSmith is a must for .net developers.&lt;/p&gt; &lt;p&gt;3.) Configure all the properties in the CodeSmith developer.  This QuickStart template will create everything from the Data Project, to a test application.  I personally don't use those, as i already know they work.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_1.png" width="400" height="321"&gt;&lt;/a&gt;  &lt;p&gt; &lt;/p&gt; &lt;p&gt;4.) Press the Run button, and CodeSmith studio will create the plinqo template files needed to generate your data tier.&lt;br&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_2.png" width="243" height="93"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;6.) Load up your Visual Studios by double clicking on the solution it created.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_3.png" width="244" height="208"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;7.) Right click on the csp file that's in the linq project and click "Generate"&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_4.png" width="173" height="244"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;You will now notice a bunch of new files that it has generated. These are files that are from the database -&gt; Code.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_5.png" width="200" height="447"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Technically at this point, you are ready to start using it.&lt;/p&gt; &lt;p&gt;8.) The next step is something I do. I think this has been resolved in the latest version of &lt;a href="http://plinqo.com/" target="_blank"&gt;plinqo&lt;/a&gt; and I have submitted for this issue a while back and they said it was resolved now, but I still do it manually anyways.&lt;/p&gt; &lt;p&gt;Notice that it generated a .dbml file. This dbml file holds the schema to your entire database.  Its very nice because you can make changes within it and the generator will keep your changes when you re-generate.  Its also nice because if you change something your database, or add a new table, it will pick it up, and add it to your modified .dbml file for you, and even create the missing .cs (.vb if you still go that route - yuck).&lt;/p&gt; &lt;p&gt;The 2 things that I change are two auto-generated type names.&lt;/p&gt; &lt;p&gt;Open up the dbml file, and click on the white area and go to the properties of the dbml.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_6.png" width="932" height="391"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Change the Name to something nicer like: EventDataContext and save it.  &lt;/p&gt; &lt;p&gt;Next right click on the csp file, and go to Manage Output.  Select "Managers" and "Edit Output" - Change the DataManagerName to something a little more attractive instead of the default (it usually isnt something you woudl want to type in in your code).  I usually change it to something like [Project]DataManager  so in this case EventDataManager. Save and close.&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_16.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/Plinqocansaveyouvalu.netdatabaseprojects_8A9E/image_thumb_7.png" width="410" height="293"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Go and delete the files that it generated in the /Entities and /Managers, and re-run the Generate on the csp file. This is a safe thing to do, and it will refresh all your objects.&lt;/p&gt; &lt;p&gt;10.)  You now have a very nice data tier for your database.   Now, I have taken it a step further, and actually created a CodeSmith studio template that actually makes easier business objects out of the classes.  But, if you don't have to use that to take advantage of this already ready to go app.  I am a big fan of factory patterns, so the only thing a user can do to generate a new instance is the static methods available.  Here is an example of its usage (output from one of my templates):&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;pre class="c-sharp" name="code"&gt;/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//  Auto Generated by HJT PLinqo Extension class 
//  Version 1.0.6 - 7/08/2009
//
//  DO NOT CODE WITHIN THIS FILE - Use Partial class to extend functionally 
//
//  Usage:
//  Generate to work with your plinqo objects.
//  Extend with partial classes to support additional functionally
//
//  Revision History:
//  1.0.0 - Travis Whidden - 3/30/2009
//  1.0.1 - Travis Whidden - 4/06/2009
//        - Added new static partial method for Initialize 
//  1.0.2 - Travis Whidden - 4/07/2009
//        - Return null on get methods that dont return anything. 
//  1.0.3 - Travis Whidden - 4/24/2009
//        - Added the Linq Data Manager - Was hard coded before when it shouldn't be.
//        - Base Class Name Space and option to say which base class to use.
//	  - Object Constructors to use the base class DataContext instead of the Linq DataContext
//	  - GetByQueryExpression is requiring DataContext instead of the Linq DataContext class
//  1.0.4 - Added an option that will not allow null values into the database. It will insert the 
//          default value for a type if one is not specified. Helps against failures inserting into
//          databases that dont allow null values.
//  1.0.5 - Deconstructor could possibly dispose of linq objects before they are done being used. 
//	    Disabled in this version.  GC will handle on its own.
//  1.0.6 - Travis Whidden - 7/8/2009
//		  - Fixed the Save with No nulls to use type codes instead of guessing the reflection type
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;

namespace HJT.DataEvents.Linq
{
    /// &lt;summary&gt;
    /// DataEvent Entity Container for managing the Linq object and life cycle.
    /// &lt;/summary&gt;
    [Serializable()]
    public partial class DataEvent : HJTLinqBase, IDisposable
    {
        #region "Class Members"

        /// &lt;summary&gt;
        /// Holds the reference to the Linq entity associated with this business object.
        /// &lt;/summary&gt;
        private DataEvents _dataEvents = null;

        #endregion

        #region "Constructors"

        /// &lt;summary&gt;
        /// Default Constructor - Only use for serilization
        /// &lt;/summary&gt;
        internal DataEvent(){}

        /// &lt;summary&gt;
        /// Used to create a new DataEvent object.
        /// &lt;/summary&gt;
        /// &lt;param name="context"&gt;&lt;/param&gt;
        internal DataEvent(DataContext context)
        {
            _context = context;
            _isNew = true;
            _dataEvents = new DataEvents(); // Create a new DataEvents Object used to hold the user info
        }

        /// &lt;summary&gt;
        /// Used to manage an existing user session object.
        /// &lt;/summary&gt;
        /// &lt;param name="context"&gt;&lt;/param&gt;
        /// &lt;param name="dataEvents"&gt;&lt;/param&gt;
        internal DataEvent(DataContext context, DataEvents dataEvents)
        {
            _context = context; // Used throughtout the objects lifecycle
            _dataEvents = dataEvents; // Sets the reference to the object we will use through out thsi object lifecycle.

        }

        /// &lt;summary&gt;
        /// Default Deconstructor.  Disposes of anything that could potentially create a memory problem.
        /// &lt;/summary&gt;
        ~DataEvent()
        {
			// Disabled for now - possible disposing of the object before its done being used
            //this.Dispose();
        }

        #endregion

        #region "Properties"

        /// &lt;summary&gt;
        /// Holds reference to the existing DataEventsObject
        /// &lt;/summary&gt;
        public DataEvents DataEventsObject
        {
            get { return _dataEvents; }
        }

        #endregion

        #region "Methods"

        /// &lt;summary&gt;
        /// Delete this current entity.
        /// &lt;/summary&gt;
        public override void Delete()
        {
            DataEvent.Delete(this);
        }

        /// &lt;summary&gt;
        /// Saves this current entity
        /// &lt;/summary&gt;
        public override void Save()
        {
			// Enumerate over all the properties to ensure they are not null
            var members = this.DataEventsObject.GetType().GetProperties();
            foreach (var info in members)
            {
                if (info.GetValue(this.DataEventsObject, null) == null)
                {
                    try
                    {
                        var typeCode = Type.GetTypeCode(info.PropertyType);
                        if (typeCode == TypeCode.String)
                        {
                            info.SetValue(this.DataEventsObject, "", null);
                        }
                        else if (typeCode == TypeCode.DateTime)
                        {
                            info.SetValue(this.DataEventsObject, DateTime.Parse("1/1/1970"), null);
                        }
                        else if (typeCode == TypeCode.Boolean)
                        {
                            info.SetValue(this.DataEventsObject, false, null);
                        }
                        else if (info.PropertyType == typeof(Guid)) { }
                        else
                        {
                            // Numeric?
                            if(info.PropertyType.IsValueType)
                            {
                                info.SetValue(this.DataEventsObject, 0, null);    
                            }
                            
                        }
                    }
                    catch (Exception ex)
                    {
                        //Debug.WriteLine("Null Type could not be changed to non null: " + info.GetType().Name +
                        //                " in object " + this.GetType().Name);
                    }
                }
            }
			
		
            DataEvent.Save(this);
            _isNew = false;
        }

        // Disposes of the Data Context - this is only active within this object.
        public void Dispose()
        {
            if (Context != null)
            {
                Context.Dispose();
                _context = null; 
            }
        }

        #endregion

        #region "Static Methods"
		
        /// &lt;summary&gt;
        /// If the object needs to be initialized, it can be safely added the partial class for this partial method.
        /// &lt;/summary&gt;
        /// &lt;param name="connectionString"&gt;&lt;/param&gt;
        static partial void Initialize(string connectionString);
		
		/// &lt;summary&gt;
        /// Create an instance of the DataEvent object.
        /// &lt;/summary&gt;
        /// &lt;param name="connectionString"&gt;Database Connection String&lt;/param&gt;
        /// &lt;returns&gt;Returns a fresh, ready to go object.&lt;/returns&gt;
        public static DataEvent Create(string connectionString)
        {
            // Initialize anything this object may require to be initialized first
            Initialize(connectionString);
		
            var newObject = new DataEvent(new EventDataContext(connectionString));
            
            // Set the primary key(s) for the user if needed
			newObject.DataEventsObject.DataEventID = 0;
            
            // Return the ready to go object.
            return newObject;
        }

        /// &lt;summary&gt;
        /// Retreives the DataEvent object from the database
        /// &lt;/summary&gt;
        /// &lt;param name="connectionString"&gt;The database connection string where this request is being made.&lt;/param&gt;
        /// &lt;param name="dataEventID"&gt;The primary Key (dataEventID) that is being requested.&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        public static DataEvent Get(string connectionString, long dataEventID)
        {
            // Initialize anything this object may require to be initialized first
            Initialize(connectionString);
            // The data context that is used.
            var context = new EventDataContext(connectionString);
            // The Manager for retrieving the data
            var manager = new EventDataManager(context);
            // Gets the database object from the Database using the manager
            var dbObject = manager.DataEvents.GetByKey(dataEventID);
			// If the object is null, we want to return nothing
			if(dbObject == null){
				context.Dispose();
				return null;
			}
            // Creates a new singular type with extentions 
            var dataEvent = new DataEvent(context, dbObject);
            // return 
            return dataEvent;
        }

        /// &lt;summary&gt;
        /// Returns a list of the DataEvent Objects
        /// &lt;/summary&gt;
        /// &lt;param name="connectionString"&gt;&lt;/param&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        public static IEnumerable&lt;dataevent&gt; GetAll(string connectionString)
        {
			// Initiatlize anything this object may require to be inialized first
            Initialize(connectionString);
		
            // Data Context Creation
            var context = new EventDataContext(connectionString);
            // Generic Container for calling 
            var results = new List&lt;dataevent&gt;();
            // Enumerate throught the Linq Objects
            foreach (var result in context.DataEvents.ToList())
            {
                // Create the new container object
                results.Add(new DataEvent(context, result));
            }
            return results;

        }

        /// &lt;summary&gt;
        /// Return the base of a Linq object request so a query can be extended. This isn't public exposed, as we want
        /// to have control in our business objects on what is permitted to be queried. Also, these objects once converted 
        /// into business objects must be wrapped in this business layer to have the functions that this layer creates.
        /// &lt;/summary&gt;
        /// &lt;returns&gt;&lt;/returns&gt;
        internal static IQueryable&lt;dataevents&gt; GetByQueryExpression(DataContext context)
        {
            // Initialize anything this object may require to be initialized first
            Initialize(context.Connection.ConnectionString);
		
            // Becuse we dont know anything about the query at this point in time, we will need to depend on 
            // the calling object to create the data context for us.  We dont wnat to hide the data context 
            // as the IQueryable at this point is just the base query that is needed for the rest of the query.
            return ((EventDataContext) context).DataEvents;
        }

        /// &lt;summary&gt;
        /// Delete an instance of the DataEvent object
        /// &lt;/summary&gt;
        /// &lt;param name="dataEvent"&gt;The DataEvent object to remove&lt;/param&gt;
        public static bool Delete(DataEvent dataEvent)
        {
	     if (dataEvent != null)
            {
                // Initialize anything this object may require to be initialized first
		Initialize(dataEvent.Context.Connection.ConnectionString);
			
                // Reqeusts the Data SQL from the Linq Expression
                var result = from myRows in DataEvent.GetByQueryExpression(dataEvent.Context)
                             where 
							 myRows.DataEventID == dataEvent.DataEventsObject.DataEventID
							
                             select myRows;
                
                // Gets the single or default result (null is default)
                var singleRow = result.SingleOrDefault();

                // Dont try and delete something that isnt there.
                if (singleRow != null)
                {
                    // Adds the single row to the delete queue
                    ((EventDataContext)dataEvent.Context).DataEvents.DeleteOnSubmit(singleRow);
                    // Commit the changes to the database.
                    dataEvent.Context.SubmitChanges();
                    return true;
                }
            }
            // No data was deleted.
            return false;
        }

        /// &lt;summary&gt;
        /// Saves the DataEvent to the database
        /// &lt;/summary&gt;
        /// &lt;param name="dataEvent"&gt;the DataEvent object that is being saved&lt;/param&gt;
        public static void Save(DataEvent dataEvent)
        {
            if (dataEvent != null)
            {
				// Initiatlize anything this object may require to be inialized first
				Initialize(dataEvent.Context.Connection.ConnectionString);
					
                // If the object is a new object (not in the database), we have to insert it first into the context.
                if (dataEvent.IsNew)
                {
                    ((EventDataContext)dataEvent.Context).DataEvents.InsertOnSubmit(dataEvent.DataEventsObject);
                }
                // Submit changes
                dataEvent.Context.SubmitChanges(ConflictMode.FailOnFirstConflict);    
            }
        }

        #endregion
    }
}

&lt;/pre&gt;
&lt;p&gt;I have not really decided if I want to release my template to the general public. We used to work with people that have stolen our code and ideas and then created legal issues for us, so by releasing my templates I risk them doing it again.   If you would like a copy of my template, please email me directly travis |atsign| hjtcentral.com and I will email you what I have.  Its very nice, and it has a base class to go with it.   &lt;/p&gt;
&lt;p&gt;In conclusion.  If you don't want to spend your whole month building the data tier, and are looking to code on the fly - &lt;a href="http://plinqo.com/" target="_blank"&gt;plinqo&lt;/a&gt; is the way to go.  If you are just starting to use it, you will understand how powerful it is very soon.  Although there are other good tiers you can go with, after my testing I found this to be the fastest and most efficient method of doing it for what I was doing.  I hope this helps jump start your &lt;a href="http://plinqo.com/" target="_blank"&gt;plinqo&lt;/a&gt; experience&lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/422/Default.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/422/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/422/Default.aspx</guid>
      <pubDate>Sat, 01 Aug 2009 17:58:05 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=422</trackback:ping>
    </item>
    <item>
      <title>asp.net and wcf compression via IIS</title>
      <description>&lt;p&gt;For many years, I have though that all items served out of IIS would be compressed if you enabled the IIS option to compress static and dynamic files.  Unfortunately I was wrong.   You actually have to tell IIS what files you want to serve out compressed.&lt;/p&gt; &lt;p&gt;I actually came across this while looking for a solution to compress my WCF elements.  Some of the datasets that I was returning were upwards of 500kb.  On a slower connection, that just is not going to work.  Once I enabled this option, requests that were 500kb were 12-20kb.  That's a huge performance increase.  I tested at different site, and found there to be a huge performance increase.  In one spot, a 128k frame system sending these reports took 17 seconds.  After the fix, took only 3 seconds.  &lt;/p&gt; &lt;p&gt;I must note that your WCF services that are hosted through IIS must be marked with the &lt;/p&gt; &lt;pre name="code" class="c-sharp"&gt;[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]&lt;/pre&gt;
&lt;p&gt;(or enabled via the web.config). I'm not positive on that requirement, but that's how I understand it.&lt;/p&gt;
&lt;p&gt;So, to enable this wonderful option:&lt;/p&gt;&lt;pre name="code" class="c-sharp"&gt;CSCRIPT.EXE C:\Inetpub\AdminScripts\ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcScriptFileExtensions "asp" "dll" "exe" "svc" "aspx" "asmx"
CSCRIPT.EXE C:\Inetpub\AdminScripts\ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcScriptFileExtensions "asp" "dll" "exe" "svc" "aspx" "asmx"
CSCRIPT.EXE C:\Inetpub\AdminScripts\ADSUTIL.VBS SET W3Svc/Filters/Compression/GZIP/HcDynamicCompressionLevel 9
CSCRIPT.EXE C:\Inetpub\AdminScripts\ADSUTIL.VBS SET W3Svc/Filters/Compression/DEFLATE/HcDynamicCompressionLevel 9 &lt;/pre&gt;
&lt;p&gt;Then restart IIS - your golden.&lt;/p&gt;
&lt;p&gt;I hope this helps.  I spent about 3-4 hours trying to write my own WCF channel with worries about compatibility with non .net clients such as J2EE. I had may different options working but each had their downside (special client requirements). This is the best way I feel, as it allows the client to specify if they support GZIP or DEFLATE and if they don't, well, they can have the raw data.&lt;/p&gt;
&lt;p&gt;Maybe a future version of WCF will support a gzip binding for wcf natively.  For now, there is IIS which seems to do just fine.&lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/420/Default.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/420/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/420/Default.aspx</guid>
      <pubDate>Tue, 21 Jul 2009 03:40:07 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=420</trackback:ping>
    </item>
    <item>
      <title>Generic WCF Client</title>
      <description>&lt;p&gt;We have been diving deep into WCF lately.  WCF is very nice to use, and a great alternative to web services.   One of the things we are doing is dynamic WCF services where services can be created at run time of the web application (highly modified version of BinaryCoder's &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/350f2cb6-febd-4978-ae65-f79735d412db" target="_blank"&gt;source listed&lt;/a&gt; on the MSDN website).   &lt;/p&gt; &lt;p&gt;Anyhow, we are making reference to WCF interfaces that are hosted via IIS, and not wanting to generate the dirty proxy code that you need to do with web services.  &lt;/p&gt; &lt;p&gt;This is a great snippet - the original is: &lt;a title="http://blog.weminuche.net/" href="http://blog.weminuche.net/"&gt;http://blog.weminuche.net/&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Our changes were to fit our design, which was a different constructor where we passed the URI of the service, and the receive message size because some of the data results that were passed back were larger then the default window.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;pre class="c-sharp" name="code"&gt;
/// &lt;summary&gt;
/// Generic Service Proxy for WCF - Connect to a URI/L with a type interface.
/// &lt;/summary&gt;
/// &lt;typeparam name="TInterface"&gt;&lt;/typeparam&gt;
public class ServiceProxy&lt;TInterface&gt; : ClientBase&lt;TInterface&gt;, IDisposable where TInterface : class
{
   #region Delegates

   public delegate void ServiceProxyDelegate&lt;T&gt;(TInterface proxy);

   #endregion

   public ServiceProxy()
       : base(typeof (TInterface).ToString())

   {
   }


   /// &lt;summary&gt;
   /// Pass the URI directly to the constructor.  
   /// &lt;/summary&gt;
   /// &lt;param name="uri"&gt;&lt;/param&gt;
   public ServiceProxy(string uri)
       : base(new BasicHttpBinding(){MaxReceivedMessageSize = int.MaxValue}, new EndpointAddress(uri))
   {
       
   }


   public TInterface Proxy
   {
       get { return Channel; }
   }

   #region IDisposable Members

   public void Dispose()
   {
       if (State == CommunicationState.Faulted)
       {
           base.Abort();
       }
       else
       {
           try
           {
               base.Close();
           }
           catch
           {
               base.Abort();
           }
       }
   }

   #endregion

   protected override TInterface CreateChannel()
   {
       return base.CreateChannel();
   }


   public static void Call(ServiceProxyDelegate&lt;TInterface&gt; proxyDelegate)

   {
       Call(proxyDelegate, typeof (TInterface).ToString());
   }


   public static void Call(ServiceProxyDelegate&lt;TInterface&gt; proxyDelegate, string endpointConfigurationName)

   {
       var channel = new ChannelFactory&lt;TInterface&gt;(endpointConfigurationName);
       try
       {
           proxyDelegate(channel.CreateChannel());
       }
       finally
       {
           if (channel.State == CommunicationState.Faulted)
           {
               channel.Abort();
           }
           else
           {
               try
               {
                   channel.Close();
               }
               catch
               {
                   channel.Abort();
               }
           }
       }
   }
}&lt;/pre&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Usage is very simple:&lt;/p&gt;&lt;pre class="c-sharp" name="code"&gt;using (var client = new ServiceProxy&lt;IModuleServices&gt;(someURI))
{
 var md = client.Proxy.ModuleDetailsGet(packet.UserSession.SessionID, packet.ModuleInstalledID);
 return md.ReturnValue;
}&lt;/pre&gt;</description>
      <link>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/415/Default.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/415/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/415/Default.aspx</guid>
      <pubDate>Wed, 17 Jun 2009 01:05:31 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=415</trackback:ping>
    </item>
    <item>
      <title>Content Control Squeeze Example</title>
      <description>&lt;p&gt;  &lt;p&gt;Example of using the ContentControl - it squeezes the content down to its minimum size.    I am sure there is a solution, just need to find out how/what &lt;p&gt;  &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_10.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="177" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_thumb_4.png" width="788" border="0"&gt;&lt;/a&gt;  &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_4.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="439" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_thumb_1.png" width="728" border="0"&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_8.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="179" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_thumb_3.png" width="742" border="0"&gt;&lt;/a&gt;  &lt;p&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_2.png"&gt;&lt;img title="image" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="385" alt="image" src="http://www.traviswhidden.com/Portals/15/digmeta/5/WindowsLiveWriter/ContentControlSqueezeExample_890F/image_thumb.png" width="727" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;p&gt;Note, this is just a tester app. I am using the Content Control dynamically in my real application.&lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/352/Default.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/352/Default.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/PublicBlog/tabid/358/EntryId/352/Default.aspx</guid>
      <pubDate>Mon, 29 Dec 2008 17:45:27 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=352</trackback:ping>
    </item>
    <item>
      <title>Don't think the 1.0.5 module fixed digmeta - try again?</title>
      <description> When I go to open an existing blog, I still get an error Message:          Here is the error message I get:                 I do love how I can embed images into this thing however. That is just amazing!   Travis        Testing the Open -&gt; Edit -&gt; Save :) &lt;a href=http://www.traviswhidden.com/Blog/tabid/358/EntryId/133/Dont-think-the-1-0-5-module-fixed-digmeta-try-again.aspx&gt;More...&lt;/a&gt;</description>
      <link>http://www.traviswhidden.com/Blog/tabid/358/EntryId/133/Dont-think-the-1-0-5-module-fixed-digmeta-try-again.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/Blog/tabid/358/EntryId/133/Dont-think-the-1-0-5-module-fixed-digmeta-try-again.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/Blog/tabid/358/EntryId/133/Dont-think-the-1-0-5-module-fixed-digmeta-try-again.aspx</guid>
      <pubDate>Sun, 13 Jan 2008 06:18:10 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=133</trackback:ping>
    </item>
    <item>
      <title>Testing DigMeta found on snowcovered</title>
      <description>   Its a little buggy.  I cant edit any existing posts, but I can post new.  I also manage several blogs that exist on this DNN site, and I can use live writer to select between each one of them.  60 bucks is a little expensive for a slice of software that does not work perfectly.   Anyhow, We will continue to report bugs.. Hopefully they find a fix for this.  &lt;a href=http://www.traviswhidden.com/Blog/tabid/358/EntryId/132/Testing-DigMeta-found-on-snowcovered.aspx&gt;More...&lt;/a&gt;</description>
      <link>http://www.traviswhidden.com/Blog/tabid/358/EntryId/132/Testing-DigMeta-found-on-snowcovered.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/Blog/tabid/358/EntryId/132/Testing-DigMeta-found-on-snowcovered.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/Blog/tabid/358/EntryId/132/Testing-DigMeta-found-on-snowcovered.aspx</guid>
      <pubDate>Sun, 13 Jan 2008 00:08:55 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=132</trackback:ping>
    </item>
    <item>
      <title>Dynamic SQL statments in SQL 2005 -- Stored Procedures</title>
      <description>&lt;p&gt;I decided to throw up some code that I like to use, but hate re-writting.  This is how I do some of the dynamic SQL statements.  If you think there is a better way of doing it, please let me know.  This has worked very well for me so far.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;textarea rows="600" cols="100" class="c-sharp" name="code"&gt;USE 
GO
/****** Object:  StoredProcedure [dbo].[RS_Reservations_Get_List_By_DateRange]    Script Date: 09/08/2007 17:14:28 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
------------------------------------------------------------------------------------------------------------------------
-- Date Created: Tuesday, November 18, 2006
-- Created By:   Travis
------------------------------------------------------------------------------------------------------------------------

CREATE PROCEDURE [dbo].[RS_Reservations_Get_List_By_DateRange]
	@StartDate datetime,
	@EndDate datetime,
	@CompanyID uniqueidentifier,
	@LocationID uniqueidentifier,
	@ReservationObjectID uniqueidentifier
AS

Declare @BaseSQL nvarchar(900)
Declare @WhereSQL nvarchar(900)
Declare @FinalSQl nvarchar(900)

set @BaseSQL = '
SELECT
	[ReservationID],
	[FK_ReserveObjectID],
	[UTC_ReservationDateTime],
	[ReservedMinutes],
	[HoldExpires],
	[Canceled],
	[UTC_Created],
	[UTC_Updated],
	[FK_CreatedBy],
	[FK_CanceledBy],
	[FK_SalesOrderItemID]
FROM
	[dbo].[viewReservationAssociations]
'

/* Set the initial value */
set @WhereSQL = ''

/* Build the rest of the where clause dynamicly */

if @StartDate IS NOT NULL AND @EndDate IS NOT NULL
begin
	if @WhereSQL = ''
	begin
		set @WhereSQL = ' WHERE '
	end
	else
	begin
		set @WhereSQL = @WhereSQL + ' AND '
	end

set @WhereSQL = @WhereSQL + ' [UTC_ReservationDateTime] between ''' + Convert(varchar(20), @StartDate) + ''' AND ''' + Convert(varchar(20), @EndDate) + ''''
end

if @CompanyID IS NOT NULL
begin
	if @WhereSQL = ''
	begin
		set @WhereSQL = ' WHERE '
	end
	else
	begin
		set @WhereSQL = @WhereSQL + ' AND '
	end

set @WhereSQL = @WhereSQL + ' [CompanyID] = ''' + Convert(varchar(40), @CompanyID) + ''''
end

if @LocationID IS NOT NULL
begin
	if @WhereSQL = ''
	begin
		set @WhereSQL = ' WHERE '
	end
	else
	begin
		set @WhereSQL = @WhereSQL + ' AND '
	end

set @WhereSQL = @WhereSQL + ' [LocationID] = ''' + Convert(varchar(40), @LocationID) + ''''
end

if @ReservationObjectID IS NOT NULL
begin
	if @WhereSQL = ''
	begin
		set @WhereSQL = ' WHERE '
	end
	else
	begin
		set @WhereSQL = @WhereSQL + ' AND '
	end

set @WhereSQL = @WhereSQL + ' [ReserveObjectID] = ''' + Convert(varchar(40), @ReservationObjectID)  + ''''
end

/* Create the final SQL string */
set @FinalSQL = @BaseSQL + @WhereSQL + ' ORDER BY [UTC_ReservationDateTime] DESC '

/* Execute the SQL */

EXEC dbo.sp_executeSQL @statement = @FinalSQL

   &lt;/textarea&gt;&lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/Blog/tabid/358/EntryId/94/Dynamic-SQL-statments-in-SQL-2005-Stored-Procedures.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/Blog/tabid/358/EntryId/94/Dynamic-SQL-statments-in-SQL-2005-Stored-Procedures.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/Blog/tabid/358/EntryId/94/Dynamic-SQL-statments-in-SQL-2005-Stored-Procedures.aspx</guid>
      <pubDate>Sun, 09 Sep 2007 00:19:34 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=94</trackback:ping>
    </item>
    <item>
      <title>HTML Trick: How to link image from another site that will work when your user is in HTTP or HTTPS mode</title>
      <description>&lt;p&gt; &lt;/p&gt;
&lt;div style="margin: 10px; float: left;"&gt;&lt;script type="text/javascript"&gt;
digg_url = 'http://www.traviswhidden.com/Blog/tabid/358/EntryID/98/Default.aspx';
&lt;/script&gt; &lt;script src="http://digg.com/tools/diggthis.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/div&gt;
&lt;p&gt;I have been involved with web design for many years.  Even with 15 years under my belt, I still am amazed when I find something I didn't know. I am not saying I know everything, its just those things that you wish you knew about years and years ago that really get your excitement up.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;The other day, I was looking at the HackerSafe code that my company (&lt;a href="http://www.amhosting.com" target="_blank"&gt;http://www.amhosting.com&lt;/a&gt;) has on its website.  I saw the way they put in an image tag and I was like, "what the heck.. they have a bug in their code".  Before I went crazy, I decided to look at my live production code and noticed that the way they linked the image was the same in their code they were trying to give me.&lt;/p&gt;
&lt;p&gt;So you know what I am talking about... this is what they put in the code: &lt;/p&gt;
&lt;pre&gt;src="//images.scanalert.com/meter/www.amhosting.com/12.gif"&lt;/pre&gt;
&lt;p&gt;Notice how src="//  part for it.  That is where the magic happens&lt;/p&gt;
&lt;p&gt;This is why its important.  This image is located on my company website: (Secure SSL Mode)&lt;/p&gt;
&lt;p&gt;&lt;a href="https://www.amhosting.com/MyAccount/UpdateBillingContactInformation/tabid/746/Default.aspx"&gt;https://www.amhosting.com/MyAccount/UpdateBillingContactInformation/tabid/746/Default.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;and the same image code is located on a non https page: (No SSL)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.amhosting.com/Home/tabid/293/Default.aspx"&gt;http://www.amhosting.com/Home/tabid/293/Default.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The browser actually knows based on what state your page is on what to call to the remote server.   If you didn't have your code like this, it would throw a security error to the end user asking them if they want to show insecure images. Not only does that break credibility, but it also is very annoying between page clicks. &lt;/p&gt;
&lt;p&gt;I know this is a very "small" finding, but it is very useful when building ecommerce sites that link to outside content. I hope you are as excited as I am with this very small find.&lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/Blog/tabid/358/EntryId/98/HTML-Trick-How-to-link-image-from-another-site-that-will-work-when-your-user-is-in-HTTP-or-HTTPS-mode.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/Blog/tabid/358/EntryId/98/HTML-Trick-How-to-link-image-from-another-site-that-will-work-when-your-user-is-in-HTTP-or-HTTPS-mode.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/Blog/tabid/358/EntryId/98/HTML-Trick-How-to-link-image-from-another-site-that-will-work-when-your-user-is-in-HTTP-or-HTTPS-mode.aspx</guid>
      <pubDate>Sat, 08 Sep 2007 17:35:23 GMT</pubDate>
      <slash:comments>4</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=98</trackback:ping>
    </item>
    <item>
      <title>Update for DNN module Smart Redirect for 404 errors. New undefined url tracking</title>
      <description>&lt;p&gt;As some of you may know, I recently released a module for DNN that you can use to help redirect your clients to the correct url. This is very handy if you are moving a website to DNN, and dont want to loose your search engine postion links.&lt;/p&gt;
&lt;p&gt;I recently updated my code to support tracking hits to yoru pages that result in 404, file not found codes.   It increments each time they are entered.&lt;/p&gt;
&lt;p&gt;Here is an example of one of my websites I run that used to be written all in asp.  (click ot enlarge)&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.badassride.com/Portals/15/BlogImages/tracking_undefined_urls.JPG"&gt;&lt;img height="337" alt="Undefined URLs in DotNetNuke " width="500" border="1" src="http://www.badassride.com/Portals/15/BlogImages/tracking_undefined_urls.JPG" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As you can see, this is very good information to have so you dont loose valuable clients coming to your website.&lt;/p&gt;
&lt;p&gt;This product can be purchased on SnowCovered for $10 bucks as of today:&lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;font color="#810081"&gt;&lt;a href="http://www.snowcovered.com/Snowcovered2/Default.aspx?tabid=242&amp;PackageID=7640&amp;r=7955725ffc"&gt;http://www.snowcovered.com/Snowcovered2/Default.aspx?tabid=242&amp;PackageID=7640&amp;r=7955725ffc&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/Blog/tabid/358/EntryId/43/Update-for-DNN-module-Smart-Redirect-for-404-errors-New-undefined-url-tracking.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/Blog/tabid/358/EntryId/43/Update-for-DNN-module-Smart-Redirect-for-404-errors-New-undefined-url-tracking.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/Blog/tabid/358/EntryId/43/Update-for-DNN-module-Smart-Redirect-for-404-errors-New-undefined-url-tracking.aspx</guid>
      <pubDate>Mon, 02 Jul 2007 23:29:24 GMT</pubDate>
      <slash:comments>7</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=43</trackback:ping>
    </item>
    <item>
      <title>DNN 404 Smart Redirect Added to SnowCovered</title>
      <description>&lt;p&gt;Today I added a 404 redirect module to Snowcovered.  This module is very easy to use and extreamly important to anyone who is moving to DNN from their oldschool website. &lt;/p&gt;
&lt;p&gt;&lt;u&gt;&lt;font color="#810081"&gt;&lt;a href="http://www.snowcovered.com/Snowcovered2/Default.aspx?tabid=242&amp;PackageID=7640&amp;r=7955725ffc"&gt;http://www.snowcovered.com/Snowcovered2/Default.aspx?tabid=242&amp;PackageID=7640&amp;r=7955725ffc&lt;/a&gt;&lt;/font&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;Let me know if you have any questions or need assistance with it.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;</description>
      <link>http://www.traviswhidden.com/Blog/tabid/358/EntryId/41/DNN-404-Smart-Redirect-Added-to-SnowCovered.aspx</link>
      <author>travis@lvfbody.com</author>
      <comments>http://www.traviswhidden.com/Blog/tabid/358/EntryId/41/DNN-404-Smart-Redirect-Added-to-SnowCovered.aspx#Comments</comments>
      <guid isPermaLink="true">http://www.traviswhidden.com/Blog/tabid/358/EntryId/41/DNN-404-Smart-Redirect-Added-to-SnowCovered.aspx</guid>
      <pubDate>Wed, 27 Jun 2007 05:04:49 GMT</pubDate>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://www.badassride.com/DesktopModules/Blog/Trackback.aspx?id=41</trackback:ping>
    </item>
  </channel>
</rss>