Tuesday, October 28, 2008

Implement p3p headers - Cross-Site (Domain) iFrames

With ever growing popularity of widget based sites, I think, there is a trend of using iFrames in lot of web sites to show content/applications across domains. There are challenges though and one common one being that the cookies from the iFrame doesn't work when the parent is on a different domain.

If privacy is set to low then this might no be an issue; but since most users would have it set to medium the browser won't let the iFrame to write cookies if that's from a different domain than the parent. To resolve this problem, we need to let the browser allow the cookies from the iFrame site and this can be done with p3p headers.

To do this in a .Net application, we can use the Application_BeginRequest event to set the custom http header to allow p3p.


protected void Application_BeginRequest(object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
}


A rather easier way to do this in general, even for classic asp, is to set this in IIS. Go to site properties - HTTP Headers - Add Custom HTTP Header:
Name: p3p
Value: CP="CAO PSA OUR"




Love coding!

Friday, October 10, 2008

Trouble shooting? May be try 5 Whys

Trouble shooting - We all have seen it & done it (may be many many times). It may be a practice that some of us already use to try 5 Whys. It might be an engineering concept but certainly might be applied to any situation. There are shortcomings and criticisms to this approach, but its not a bad idea to try out.

Just recently saw a team struggling to get their application running properly. They had too many issues and saw them applying patches feverishly to make it work. I can understand the pressure under tough time lines and sympathize with the team. That's when I was thinking about the 5 Whys. As simple as it sounds, it is an effective way of getting to root cause of the problem.

On the lighter side, we have seen many times, teams get to the root cause and term it as bad initial design (so have to live with it...).

There is no one solution that fits all or solves all problems. Go by what we can do the best given the limitations but use the right tools (& force) to solve the problems we trouble shoot.

Love coding!

Wednesday, October 8, 2008

ASP.Net Data Cache & Oracle Database Change Notification

A good web application design has data caching built to it. It is always a fine balance to find out what’s the optimal level to keep the cache and the refresh intervals. In most of my designs I compartmentalize these into various types like 24 hour windows, specified number of hour windows, user types with specified number of hours… etc.


The question that follows naturally is how to force a cache refresh. Again, multiple ways to go about doing it and here I wanted to bring forward the concept with Oracle 10g called Database Change Notification methodology. Read this ODP.Net article from Oracle that goes in detail about this.


To highlight this concept in simple terms it is done with some sort of notification (typically an event) built in our applications. An example might look like this:


OracleConnection con = new OracleConnection("Your Connection String");

OracleCommand cmd = new OracleCommand("Your SQL", con);

con.Open();

// Register notification with command object if result changes.

// When an OracleDependency instance is bound to an OracleCommand

// instance, an OracleNotificationRequest is created and is set in the

// OracleCommand's Notification property. This indicates subsequent

// execution of command will register the notification.

OracleDependency dep = new OracleDependency(cmd);

// Allow the change notification handler in the database to persist

// even after the first database change

cmd.Notification.IsNotifiedOnce = false;

// Add the event handler to handle the notification.

// The OnDatabaseNotification method will be invoked when a notification

// message is sent from the database

dep.OnChange +=

new OnChangeEventHandler(OnDatabaseNotification);

OracleDataAdapter da = new OracleDataAdapter(cmd);

// Do your data stuff here...

// This event gets triggered on Database Change Notification

public static void OnDatabaseNotification(object src, OracleNotificationEventArgs args)

{

// Call your cache refresh method here...

}

Love coding!

Tuesday, October 7, 2008

Visual Studio - Web Project vs Web Site

Since Visual Studio 2005, I think, we see this question being asked quite frequently - what's the difference between a Web Proejct and a Web Site; and which one should I use. Well, I have used both and have my reasonings for using either. I agree with others that this is a decision left to individual scenario and situation; which the architect and/or the lead members can make a decision.

To help you to make an informed decision, here are some really nice articles that address this topic:

MSDN Article
Mike Hacker's Blog
Maor David's Blog
Damieng's Blog
Anthony Grace's Article

Love coding!

Wednesday, October 1, 2008

WCF Services - starters basic trouble shooting

I recommend starters to understand fundamental concepts of WCF from MSDN. I composed some of my answers to basic questions/trouble shooting items for beginners and posted on my knol - WCF: Beginners FAQ.

I will keep this list growing and if anybody has any suggestions/questions/additions I will be glad to include.

Love coding!