Thursday, December 25, 2008
Thursday, October 23, 2008
Saturday, October 18, 2008
We kept our database scripts in VS.net database projects. Idea is to create the database with sql scripts everytime before running the unit tests. This way we can detect any mistakes in the sql server scripts. We wrote two power shell scripts. First one to combine all the sql scripts together into a file and the other one to drop and create the database. Integration with CC.net was done using the Executable Task in CC.net.
Friday, October 10, 2008
Recently Amazon made an announcement that they will be introducing Windows Server and SQL Server in cloud. However, they are not first ones to do that. There is already a cloud service called Go Grid. It been around since March and not many people know about. For our latest project we decided to give it a try and found it to very useful. Few advantages Go Grid have right now over EC2
· 24/7 technical support that comes with the account at no extra change.
· Nice interface for creating and deleting servers.
· Licensed Win 2003, Win 2008 and SQL Server 2005.
· Have prepaid plans.
· Free F5 load balancers.
· They have a $50 trial plan.
Few disadvantages compare to EC2
· Right now they don’t have a cloud storage service. (According to Go Grid blog this feature will be made available very soon).
· They don’t have a backup solution. To backup one has to use some third party solution as mozy.com or S3.
· No support for custom OS images for now.
· Will get charged for server resources even if the server is shutdown. Only way to not incur charges is to delete the server.
· Currently their instances are limited to 2GB of RAM. However, this month they are supposed to be introducing 4GB and 8GB instances. (Can’t wait for that.)
Overall, my experience with the service is good except some initial setup issues. I would recommend anyone who is interested in hosting their application in a cloud give Go Grid a try.
Sunday, October 5, 2008
Sunday, September 7, 2008
- View State
o Reduce the use of view state as much as possible.
o If need to store objects in view state consider using type convertors.
o Move view state to the bottom of the page.
- Java Script and CSS
o Try to use ToolkitScriptManager instead of ScriptManager if using ASP.net AJAX Control Toolkit. It has the ability to combine Toolkit scripts together to reduce number of request.
o Use release mode in production for ToolkitScriptManager to get already compact ASP.net AJAX Control Toolkit script files.
o Combine custom java script and CSS files into one file.
o Cache CSS and Java Script in the browser.
o Compact Java Script and CSS to reduce size.
Saturday, September 6, 2008
- Manuel Abadia's ASP.NET stuff - NHibernate and calculated properties
- SOA'izing MSMQ with WCF (and Why It's Worth It)
Using these two posts we were able to create a subscriber based alert system. For our solution we created a marker interface IAlert and have all domain objects we needed to alert on inherit from this interface. Instead of using the FindDirty method as mentioned in the first post, we used OnSave [for Insert], OnFlushDirty [for Update] and OnDelete [for delete]. In these functions we place a check if the object is of type IAlert we converted its current and previous state if any into an xml packet. Then that packet was saved on the HttpContext.Current.Items collection. The reason for saving it on the Items collection is that transaction could fail and we don’t want to generate alerts for failed transactions. Then in the PostFlush method in the interceptor we called the WCF service that places that xml packet on to the MSMQ queue. This operation is asynchronous and does not add time to the transaction. On the other side we wrote a WCF service that processes that packet. This way, alert was sent asynchronously and transaction time was not effected. Another advantage of using this approach is processing WCF service has all the information needed to process that alert in the xml packet and only needs to hit that database when it needs to gets that list of subscribers to send messages.
Tuesday, September 2, 2008
Saturday, August 30, 2008
NHibernate lets the developer provider their own ADO.net connection. As we were using Open Session in View strategy we decided to pass the connection string to create a session using ISessionFactory. OpenSession(IdbConnection obj). By using this technique NHibernate’s second level cache is disabled. For our application we were not interested in using a second level cache so it didn’t matter. If you are interested in using second level cache solution is to implement your own IConnectionProvider. Information about which database to use can be passed using HttpContext.Items.
NHibernate context is feature that is very rarely talked about. NHibernate Session Factory provides a method GetCurrentSession() this lets you get current session in the context. NHibernate provides built in implementation for web application. For more information please review section 2.3 of NHibernate documentation. This way the DAO and Business Object don’t have to worry about how to create the session and remain agnostic of which database they are connecting to.
Please comment. Thanks