Thursday, July 28, 2005

Accessing Session from an HttpModule

Today I wanted to extend my NHibernate implementation to allow for multi-page transactions for certain operations (that I control) and keep with the cleaner ISession-per-HttpRequest pattern for everything else.

To do that I had to modify my HttpModule to allow for this check, but I had no access to the SessionState here.  Why is that?

Here’s what I was doing in my HttpModule:

public void Init(HttpApplication application)

{
//add event handlers
 application.BeginRequest += new EventHandler(context_BeginRequest);
 application.EndRequest += new EventHandler(context_EndRequest);
}

I was creating and disconnecting my ISession object inside of those methods. The problem is that SessionState is not loaded until after the BeginRequest had fired and before the EndRequest had fired. (specifically it is accessibly after the AcquireRequestState event). So, changing my code to this worked:

public void Init(HttpApplication application) 
{
application.PreRequestHandlerExecute += new EventHandler(application_PreRequestHandlerExecute);
application.PostRequestHandlerExecute += new EventHandler(application_PostRequestHandlerExecute);
}

Also, I saw some people online incorrectly suggesting that one implement the IRequiresSessionState or IReadOnlySessionState interfaces, but if you read the docs, those are marker interfaces for HttpHandlers only.

Tuesday, July 26, 2005

Blog Design

I had my blog redesigned by Bob Yu, our lead designer at LyntonWeb.  He’s really sharp, and a whiz with just about any design program he gets his hands on.  He also helped me get the css to play nice in both browsers, but we’re still ironing out wrinkles.

You can check his work out at http://bpd.plantedtank.net.  Shoot him an email if you’d like to hire him.  He’s a good guy.

So, what do you think of my new look?

Wednesday, July 20, 2005

Congratulations, you've installed DasBlog!

Be sure to visit all the options under "Configuration" in the Admin Menu Bar above. There are 16 themes to choose from, and you can also create your own.

 

Wednesday, July 06, 2005

Chinese translations

Sometimes for fun I will read a google-translated, chinese blog and giggle at the funny things that it translates. 
My favorite is “My Guestbook” becomes “Abundant Guest Garden.”

Even funnier is Star Wars: Episode III with chinese translated subtitles…

winterson.com: episode iii, the backstroke of the west

This is hilarious!

Friday, July 01, 2005

ControlInjector article updated

I updated my article on Code Project, the new Control Injector is much better and more useful than before.  If you haven’t yet read it, please do so and rate the article.

The link is on the right under My Articles.

Thursday, June 30, 2005

Replace notepad completely...

I wonder why Microsoft doesn't choose to update some of their most frequently used programs more often.  I mean come on!  When was the last time you saw an update to Solitaire for crying out loud.  (Speaking of, there will be a new suite of card games, complete with nice gooey graphics updates, in Longhorn….)

Anyway, one of those crappy programs is notepad, which I am glad to replace with something better.

Download Notepad2, then run this guy's batch file to tell Windows to stfu and replace the notepad.exe file.

Now I get a decent editor to View Source in Internet Explorer!

Wednesday, June 29, 2005

Lessons learned -- ViewState, Server Controls, and Control lifecycle.

Note: For visitors of your site, this entry is only displayed for users with the preselected language English/English (en)

Ugh, well... I finally fixed the major issue that has held up my development for 2 days now.It really boiled down to the fact that I had properties that were persisting themselves with ViewState like this:

Which will work perfectly well as long as you don't access this property before the control's Init event... This is what I have come up with, (and someone please correct me if I am wrong) is that ViewState is really an IStateBag instance that is given to your control, which is different for each control... This helps eliminate conflicts if I add multiple controls on the same page... If I try to access the property before this instance is created (which may be when our control is added to the parent controls collection... I'm not yet sure of this) then I get a brand new string, not the one that was previously persisted... .NET doesn't give you any error or warning that this is happening, which makes it very hard to track down.

The above worked for most of my server controls, but one in particular was giving me problems. I moved the persistance code away from the property itself, which I think I like better visually anyway, and this seems to have relieved the problem.This is how you tinker with your controls viewstate:


  
private string _myName;
public string MyName
{
get { return _myName; }
set { _myName = value; }
}

protected override object SaveViewState()
{
Pair p = new Pair();
p.First = this._myName;
p.Second = base.SaveViewState();

return p;
}

protected override void LoadViewState(object savedState)
{
Pair p = savedState as Pair;
this._myName = p.First as ArrayList;
base.LoadViewState (p.Second);
}
Hopefully this might save someone a few hours of head-scratchin.... it certainly cost me a lot more than a couple headaches.
Monday, June 27, 2005

Server control Page reference

Why does the following code generate a null reference exception?

 




 

public class MyServerControl : WebControl, INamingContainer
{
private TextBox textbox1;

protected override CreateChildControls()
{
if(! Page.IsPostBack)
{
//do stuff
}
}
}


The page reference is not set. I see this sort of example all the time on the web regarding server controls. Why is it that I can not get this to work?
Thursday, June 23, 2005

My worst job ever

Leave it to Rory Blyth to stir up some well-bottled memories of my youth.

But anyway, reading that post got me thinking. I think I have 2 of the "crappiest jobs ever" ... one was a Paperboy and the other was a Popcorn wagon attendant.

I shall reminisce in the terrors that were my first 2 jobs...

When I was 12 I decided to take a job as a paperboy. My neighbor friends all had a paper route and I somtimes helped them. It was fun and easy. Until I decided to suit up. Since 3 of my friends already had routes near our houses, I had to get a route 3 miles from my house. Where my friends had 20-30 papers on their route, I had more than 60. These papers were delivered at 4:00 am on my doorstep every Wednesday and Saturday morning, and I swore I could hear the driver snicker as he dropped 2 heavy bundles of paper on my Welcome mat.

It took me nearly an hour to fold the papers and shove them in those paper carriers (I had 2 to fill -- one went on my shoulders and one on my handlebars). I finished at around 5:30 and had 2 hours to deliver the papers. I pedaled like crazy until I reach the neighborhood, which was a trailer park. If you have never graced a trailer park with your presence before, let me tell you that THEY ALL LOOK ALIKE. I was never going to memorize this route! On top of that, everybody who lived there was old and wanted their paper perfectly on their doorstep, which is right inside the carport. This meant that I had to set my bike down FOR EVERY HOUSE and walk the paper up there.

On top of all of this responsibility: I had to collect. I had to make several trips to the neighborhood to collect money: $4.00 for each house. I got to keep $1 of that. This means in a one month period I spent about 60+ hours delivering papers and trying to collect money. I made $60 for the entire month. This makes me want to cry even now. But I was a trooper and that amount in my mind equaled "one super nintendo game EVERY MONTH!"... how sad is that.




The next candidate for worst job ever was a popcorn wagon attendant for an outdoor museum in Dallas. It was called Old City Park and they had a popcorn wagon outside. It was about the size of the trunk of my Altima (read: SMALL) and I sat next to a hot-ass popcorn machine. Inside the wagon it was probably 10 degrees hotter than the Dallas summer heat outside. On a good day my wagon was only about 105 degrees F.. The saddest part of this: I got paid $4.25 / hour.

--- ahh, I feel much better now (sort of).....