Tuesday, September 29, 2009

SharePoint Disaster Recovery

It’s Sunday night, and you just got an urgent call from the office: Your Microsoft SharePoint server is down. After some investigation, you find that the disk array in your only front-end web server is dead. You groan, wishing that you'd implemented a complete farm backup from within SharePoint. However, all is not lost. You know that SharePoint stores all its content in a separate SQL Server machine, and that server is fine. You spring into action, trying to get the environment back up before Monday morning. You ask yourself, What steps do I take? What settings will I lose? Will I get any sleep tonight?
This article will answer these questions and more. The recovery I discuss is based on the two-server farm I've mentioned, but the principles also apply to larger farms. The first (crashed) server is running all your SharePoint services (or roles), and the second server is a dedicated SQL Server system. For the purposes of this article, I'm assuming that you're running Microsoft Office SharePoint Server (MOSS) 2007, but most will also apply to Windows SharePoint Services (WSS). I also assume you’re using Windows authentication and Active Directory (AD). Of course, your environment is likely to vary in some way, so these steps won't be applicable to all situations. Toward the end of the article, I’ll also provide you with some recovery recommendations that you can use today to better protect your SharePoint investment.

Recovery Overview

SharePoint stores all content and most of its configuration in SQL Server databases. However, some configuration settings are stored only in Microsoft IIS and various web.config files. Custom code is often stored within the 12 Root (by default, C:\Program Files\Common Files\Microsoft Shared\web server extensions\12) or the global assembly cache. As you’ll see, performing only a SQL Server backup isn't enough to ensure a smooth farm recovery. Perhaps the most significant drawback is that even with many configuration settings stored in a configuration database, this is not recoverable without a SharePoint-based farm backup. (To learn more about SharePoint farm backups, see "Back up a farm by using built-in tools " at technet.microsoft.com/en-us/library/cc263298.aspx.) Nonetheless, you still have recovery options, so let’s start by reviewing what you'll need.

Assess Your Inventory

Let’s review the items you’ll need to proceed with your recovery. Here are the primary items you should identify:

  • You’ll need all your content databases (not including the one for central administration), your Shared Services Provider (SSP) service database, and your search database. All other databases will be re-created.
  • Identify your web applications and the settings that were in use. This should include your portal web application(s), your SSP web application, and your MySites web application, if applicable. Ensure that you know which content database(s) each web application was using. This is a critical reason why basic documentation for your SharePoint environment is so important. If you don’t know or have this, try to remember and document as much as you can; during the recovery, you might experience some trial and error to fit everything back together.
  • Determine your farm's build version, which will tell you what service packs or other updates that have been applied. To get this information when your farm is down, open a query window on your SQL Server system. In the SharePoint config database, run a Select * From Versions command. In the results window, look for the highest value in the version column. Common build numbers are Original release (RTM), SP1, Infrastructure Update, and SP2.
  • Identify the SharePoint domain service accounts and passwords that were in use. If you’re uncertain what accounts you have, you can obtain them from your SQL Server system's Logins folder. (Note that you might have other login accounts in addition to SharePoint, and you’ll also need to specify which account is used for which service.) If you don’t know the passwords, you can reset them in AD. Here are the domain accounts and a naming convention I often use: setup/admin account (MOSS.Admin); server farm account, aka the database access account (MOSS.Farm); application pool accounts (MOSS.PortalAppPool, MOSS.SSPAppPool); SSP Service account (MOSS.SSPService); Farm Search Service account (MOSS.Search); and Crawler account (MOSS.Crawler).
  • Identify the SharePoint domain service accounts and passwords that were in use. If you’re uncertain what accounts you have, you can obtain them from your SQL Server system's Logins folder. (Note that you might have other login accounts in addition to SharePoint, and you’ll also need to specify which account is used for which service.) If you don’t know the passwords, you can reset them in AD. Here are the domain accounts and a naming convention I often use: setup/admin account (MOSS.Admin); server farm account, aka the database access account (MOSS.Farm); application pool accounts (MOSS.PortalAppPool, MOSS.SSPAppPool); SSP Service account (MOSS.SSPService); Farm Search Service account (MOSS.Search); and Crawler account (MOSS.Crawler).
    Identify any third-party applications and SharePoint Solutions (.wsp files) that will need to be reinstalled.
  • Identify the new physical or virtual server that you'll use as your front-end web server.
  • Ensure that you have your MOSS installation media and license key.

Recovery Steps

Now that you’ve made an inventory of all the necessary components, let’s proceed with the suggested recovery steps. (When you're entering the service accounts in the steps below, I recommend that you precede the accounts with the domain name—for example: domain\MOSS.Farm.)

  1. Install the original OS version on your new server, and don’t be tempted to upgrade the OS at this point. It’s technically possible but adds another level of complexity to your recovery effort. Keep all other settings (e.g., server name, IP address) the same, if possible.
  2. Add the MOSS.Admin account to the local administrators group on the new server. Make sure this account also has logon permissions to your SQL Server system and is a member of the Sysadmin server role.
  3. Remove the previous computer account from AD, join the new server to the domain, and reboot.
  4. Install IIS.
  5. Install the same .NET Framework version that you had on the previous server. At a minimum, this would be version 3.0. If you don’t know, install the latest version, which is version 3.5 SP1, as of this writing.
  6. Install MOSS. Start by logging on as your administrative account (MOSS.Admin). Run the MOSS setup program from your installation media. As with all SharePoint installations, the recommendation is to use the Advanced and then Complete options. These options give you the most flexibility, letting you have this SharePoint server run any roles needed (e.g., Web Application, search) You can install a slipstreamed version provided it isn’t newer than the build you had previously.
  7. Before creating the farm, install all updates to match your previous build version. When doing this, make sure you apply the individual WSS update first and the MOSS update second. For example, to get to build 6318, install in this sequence: WSS SP1, MOSS SP1, WSS Infrastructure Update, MOSS Infrastructure Update. After each update, the SharePoint Products and Technologies Configuration Wizard will start. When it does, simply cancel it.
  8. Once you've applied the updates, you’re ready to create the server farm. Start by launching the SharePoint Products and Technologies Configuration Wizard, which you can access in the Microsoft Office Server group on the Start menu. When prompted, create a new server farm. Next, specify the name of your SQL Server system and the name of your SharePoint config database. If you're using the same database name that you used in your old farm, you must delete the old database first. For the username, enter the name of your server farm account (MOSS.Farm). Click Next, then enter the desired port for the Central Administration Web application and set the proper form of authentication (i.e., NTLM or Kerberos). When you see the summary screen, review it and click Next to create the farm.
  9. Start the Search service. After the farm is created, the Central Administration web site should automatically appear. If the system prompts you to log on, use your MOSS.Admin credentials. To start the search service, first go to the Operations tab and choose Services on server. In the list of services, click Start next to Office SharePoint Server Search. In the resulting dialog box, select both check boxes at the top to make the server an index and query server. For the Farm Search Service Account, enter the appropriate account (e.g. MOSS.Search).
  10. Start any additional services that are in use, such as Excel Calculation Services. For MOSS, you might not need the WSS Search service because it’s used only to index the Help collection.
  11. Re-create each of your Web applications. You’ll need to do this for your SSP Web application, your MySites Web application (if applicable), and each additional Web application that your farm was using. For each one, follow these steps: Go to the Application Management tab, choose Create or extend Web application, then select Create a new Web application. Enter the port and host header. In most cases, you can keep the path as the default. If this web application was using SSL, specify that here. Enter the application pool credentials. In most cases, each web application should use a separate application pool with unique credentials. For example, for the SSP web application, you would use a logon such as MOSS.SSPAppPool. Finally, and most important, enter the name of your SQL Server system and one of the content databases used for this web application. SharePoint will recreate this website in IIS, register it in the new config database, and link it to your existing content database. If you previously extended any of your Web applications (e.g., configured an intranet for extranet access), you should reapply this now.
  12. Associate remaining content databases with your web applications. This step is necessary only if you have multiple content databases for your web applications. Go to the Application Management tab, access Content databases, and select Add a content database. Ensure that you've selected the correct web application at the top, then specify each additional database name.
  13. Restore your SSP. In navigation menu on the left inside Central Administration, click Shared Services Administration, then Restore SSP. For SSP Name, enter in the name of your SSP such as SharedServices1. For Web application, select the Web application that you just created for your SSP. If you were using a separate Web application for My Sites, clear the use existing location check box. If you get warnings here, just acknowledge them and then select the Web application used for My Sites. Next, enter in the SSP Service Credentials (e.g. MOSS.SSPService). Enter in the name of the SSP Database and then the name of the Search Database. Finally, set the desired folder for the index file location. This should be on a drive letter that has plenty of space, so the C: default is not usually a good choice.
  14. Reset IIS. The easiest way to do so is to click Start, Run, and type iisreset.
  15. Reinstall any third-party applications or SharePoint Solutions. These can include custom IFilters (e.g., to index PDF files), custom web parts, and so on. For more information about SharePoint Solutions, see the "Solutions Overview" at msdn.microsoft.com/en-us/library/aa543214.aspx.
  16. Apply any additional configurations. This is the most problematic area because SharePoint changes might occur in a number of ways. Here are some common areas where you might need to make modifications: alternate access mappings (AAM), web.config changes to your web applications, code deployed to bin folders or global assembly cache, IIS settings (e.g., reloading and binding your SSL certificate), changes to 12 Root (e.g., Features or Site Definitions), web application policy settings, and incoming/outgoing email—in general, anything on the Operations tab in Central Administration.
  17. Issue a full crawl of all your content sources, which will recreate SharePoint’s search index. Because your index files were lost on the old server, you must re-crawl. Within your newly restored SSP, click Search settings, then Content sources and crawl schedules. For each content source, select Start Full Crawl from the context menu. Depending on the amount of content, the full crawl can take from minutes to days to complete.
  18. Last, but definitely not least, fully test your SharePoint websites to validate your work. Errors could range from minor web-part problems on pages to full sites not displaying at all. The cause of errors is most likely configuration settings or missing files.


As you can see, not having a SharePoint-specific backup makes the recovery process much more painful, and you run the real risk of ending up with one or more inoperable components. Here are some recommendations that can mitigate this risk and ensure that your recovery is quick and easy.

  • Perform regular SharePoint-specific farm backups. You can do this manually through Central Administration (on the Operations tab, select Perform a backup) or by using the stsadm.exe command-line utility. One advantage to stsadm.exe is that you create a Windows scheduled task to run on a recurring basis. Here's the basic syntax for a full farm backup using stsadm.exe: stsadm -o backup -directory -backupmethod full
  • You must run this command from one of your SharePoint servers, preferably running as your SharePoint admin account. Also, the service account running the MSSQLServer service on your SQL Server system must have Modify permissions to this UNC share and the underlying NTFS folder.
  • Because a farm backup doesn’t include everything, you should also back up your inetpub\wwwroot folders, your 12 Root folder hierarchy, and IIS (for Windows Server 2003, use iisback.vbs; for Windows Server 2008, use appcmd.exe.)
  • For more powerful and granular recovery options, consider third-party backup software such as AvePoint's DocAve, a popular and respected app.
  • When you upgrade the farm (e.g., install SP2), perform a farm backup before and after the upgrade. Creating a backup following an upgrade is recommended because you'll now be at a newer build and previous backups are more difficult to restore.
  • Maintain a configuration change log. This can be a simple document that describes the updates that were made to the farm—for example, upgrading to SP2, installing a custom application, or manually changing a web.config setting. For obvious reasons, don't store this file in SharePoint.
  • For environments that can’t afford downtime, you should build a recovery farm and configure it through step 7 above. (For more information about building a recovery farm, see "Create a recovery farm" at technet.microsoft.com/en-us/library/cc288425.aspx.) Doing so will speed up the recovery. Also, consider an additional web front end and cluster or mirror SQL Server to add additional fault tolerance to your farm. Incidentally, SharePoint is supported in a virtual environment, and it’s common to have a recovery farm in either VMware or Hyper-V.
  • Perform trial restores to your test/recovery farm. Doing so will ensure that your backups are working and that you know how to perform a restore. You really don’t want to learn how to perform a recovery during a disaster on a Sunday night.
  • When deploying custom code to your farm, use SharePoint Solutions. SharePoint Solutions are the best way to deploy custom updates to your farm. If your organization has a development team that is building SharePoint software, insist that they also create a solution package to deploy it.
  • Keep your content databases small. The larger your content databases are, the longer they will take to restore. In general, I recommend keeping each content database under 200GB.
  • Use an intuitive naming convention for your databases. As you can see, you might need to map your content databases to your web applications. Using a naming convention will make that much easier.

Earn Some Rest We've now walked through a SharePoint recovery using only SQL Server databases. Remember that you won’t be able to recover all your configuration settings; however, now that you understand how this kind of recovery works, you should be able to get your farm online within a few hours. Knowing the limitations of a database-only recovery should encourage you to consider additional backup options, along with my other recommendations. Only then can you be sure to get home in time to get some sleep.

Source is here. Happy hours...!!!

~ Gangadhar Kotu (గంగాధర్ కోటు)

Monday, September 28, 2009

Sri Sri Ravi Shankar Ashram trip

With a short notice from friend, I had been to Sri Sri Ravi Shankar Ashram with my friend's car. Today, seems to be lots of rush inside the ashram. Also noticed that there are various religions from India and devotees (Yoga students) are from other countries too.

As I noticed there, everything is commercial and too costly since the Yoga practice to buy anything. But not sure why? Is this a damn good business going on?

Seems to be Sri Sri foundation is going to start a new university in Orissa called 'Sri Sri Ravi Shankar University' by 2010. I asked them like "What is the qualification required to join this university? Does this require Graduation or Post Graduation?" What kind of answers do you expect from them? Wow..... ..... Are you thinking now on this???????

Here are the answers
  • You can do either Graduation or Post Graduation from this University. But this university will be opened in Orissa by 2010.
  • We don't have any brochures on this.
  • Give us some contacts where they can help in contributing funds.
  • Give us any contact who can rise the funds.
I was like surprised to hear the answers from them. I have no word from then when they are stressing on the last two points.

I went to this Ashram almost like 4 years ago. When I had been there last time, there were very less shopping (just underneath the Vishala Mandir). But now, everything is there including any fancy item, ......bags, shirts, trousers, ..........., handicrafts, ... tiffin, snaks, ice creams,... juice, tender coconut,.................... cyber cafe,................. ATMs,............... choultry........ Travel agencies (taxis, bus facility, airlines booking....). What a facility there?

By all, I don't think this is just an Ashram but a great resort. :(

To add this, I donno what to say, but Sri Sri Ravi Shankar came for a visit (in a car) with tight security on to the one round trip of Ashram road (inside) by 5:45 PM. I was expecting him to have a walk by him in the same path. In spite of that he came by car and just went like that even though lots of people are waiting to see him. I doubt everybody can see him during that time.

Well, as he is a Guru of Yoga and Art of Living, if he would have walk down on the path, people would have followed him and he would have become an example (role model) to not to use the vehicles inside the campus and also it would have been a message (No pollution, exercise and relief) to everybody. What happens to his teach (ethics) to everybody in the world.

I feel Sri Sri Ravi Shankar can serve lots of free or at least low price things to the public.

Finally something for free in Ashram is you can have free lunch/dinner. :)

By all means, my understanding that Art of Living is of a full commercial purpose.

~ Gangadhar Kotu

Friday, September 25, 2009

Leave vs Sick Leave

With all my bad experiences over the years, I was thought of writing this post since 2-3 years. But unfortunately couldn't do it. Finally the time has come for this.

In general, I was tried to apply LEAVE in the organization/client place (where ever I was present) very much well in advance. Applying (in advance) leave is becoming an advantage to the project managers and not even thinking of why the resource has applied leave in advance. They simply ignore the leaves and once it is approaching in a day/two/week, they will say "NOT POSSIBLE" because of the unimaginable reasons.
  • Oh, we have got an important work.
  • Oh, no; there is no backup.
  • Oh, sorry, there is a demo to the management.
  • Oh, bad, not possible this time, release is there.
  • Oh, seems to be risky to approve your leave in this crucial time
All the above reasons (Cock-n-Bull stories) seem to be funny to anybody as why the hell managers are there, just to check the mails and play the games with the career of the resources.

Why did the resource apply LEAVE in advance? Just to give manager the opportunity to plan the activities better. To fulfill all the above reasons as the manager can't plan any if he applies just on the day or day before. But What happens to the resource, he gets "NO" answer, which will make him to think of how to get the LEAVE?

Funny part here is, the resource especially receives mails (kind of appreciations like you are an important resource, playing a key role, blah... blah...) in this period of time as to make the resource COOL and Happy.

Funny part is, these managers always maintain their own lobby to know the information (like informer job). Of course these lobby people also gets opportunities if they never raise the voice for any reason.

After lots of instances like above, you will get headache or some or other health issue. You suddenly take a leave and the business (project development, delivery, ...) will never stop as everybody knows. Then the so called manager thinks of all the alternatives and make the work done.

By this time, you would have felt bored, frustrated, irritated, stressed out of your manager activities because of all these CHILDISH behaviors.

You would also try the same instance again but this time wantedly take the sick leave with no reason, no personal work... kind of testing the scenario... what happens at project level. As usual, things will go smoothly. Just a feeling..... :)

Funny result is, if you ever want to have a time off, try consider that day as sick day and inform colleague/manager the same. Nobody has dare to stop/reject this (But there are a half-wit managers where they will bargain the resources to postpone the medical checkups or any doctor appointments..... ..... should be careful with these .... ) . And you could enjoy the day as you like and attend the office next day/two.

Now feeling so better than olden days to get the leave. You got the point where the key lies and use the KEY whenever you feel like.

Just think of, if the manager would have approved the leave by considering the point "Applying the leave in ADVANCE", Do you ever think of SICK LEAVE rather applying for leave?. I'm sure You would never do that. But we everybody knows that these half-wit managers would never apply their brain for these kind of things but apply very much to play the politics.

Of course all the above is an experience with our Indian Project Managers as they have to impress next level, next next level management.

Hope you gotta know how easy to get the leave in this KALIYUGA?

Happy Time...!!

~ Gangadhar Kotu

Thursday, September 24, 2009

Indian Managers Vs Others

With all my experiences, I would like to compare the behaviours/skills of Indian managers and Other Managers (Western countries).

Indian ManagerOther Managers

Happy Time...!!

~ Gangadhar Kotu

Wednesday, September 23, 2009

CAML Queries - Cannot complete action

The Collaborative Application Markup Language (better known as CAML) is an XML-based query language that helps you querying, building and customizing Web sites based on Windows SharePoint Services. The XML elements define various aspects of a WSS site.

The Ground Rule should be either or join operators can only validate two expressions. Once it has more than two expressions in a single or join operator, it cannot be evaluated and throws a strange exception to the users. So, split them in to multiple expressions as below.

General (small example) would throw 'Cannot complete this action' exception:
< "Where" >
< "Or" >
< "Eq" >< name="'Country'/">< type="'LookUp'">India< /Value >< /Eq >
< "Eq" >< name="'Country'/">< type="'LookUp'">China< /Value >< /Eq >
< "Eq" >< name="'Country'/">< type="'LookUp'">Germany< /Value >< /Eq>
< "Eq" >< name="'Country'/">< type="'LookUp'">USA< /Value >< /Eq >
< /Or >
< /Where >

Optimized and to be working:
< "Where" >
< "Or" >
< "Or" >
< "Or" >
< "Eq" >< name="'Country'/">< type="'LookUp'">India< /Value >< /Eq >
< "Eq" >< name="'Country'/">< type="'LookUp'">China< /Value >< /Eq >
< /Or >
< "Eq" >< name="'Country'/">< type="'LookUp'">Germany< /Value >< /Eq>
< /Or >
< "Eq" >< name="'Country'/">< type="'LookUp'">USA< /Value >< /Eq >
< /Or >
< /Where >

In the above working example, you could observe that the join operator has only two expressions at any point of time.

** "Where" should be replaced with Where and "Or" should be replaced with Or. And also spaces shouldn't be there after and before the less than and greater than symbols. As blogger has a limitation, had to place like that.

So, should be very careful while writing CAML query with more values.

Microsoft has to keep an eye on throwing the right error message to the users.

You could also find the above info here

Other Sources:

Happy Coding...!!

~ Gangadhar Kotu

Saturday, September 19, 2009

Client Interview Questions

One fine day, my manager asked me to attend one client interview for a small project. But client wants an Technical Architect for that project. I was wondered why an Architect? Ofcourse, others also wondered. Here are the questions.

  • What are the new features in ASP.Net 3.5 compared to ASP.Net 2.0?
    • Script Manager, Update Panel, Update progress
    • List view, Data Pager
    • LINQ
  • What is LINQ?
    • Language Integrated Query – Used to query the data in the business layer itself to have better performance.
  • What is ListView?
    • ListView is the new control given in the 3.5 framework and can have all the functionalities as like Grid View, DataRepeater with more graphical styles
  • What is the viewstate? What is the lifespan of the same?
    • Viewstate is a built-in page attribute and is used to store the state of the controls.
    • The data is stored in this is encrypted and can be accessed through programmatically.
    • Extra data also can be stored in the viewstate programmatically.
    • The lifespan is the limited to page life time – If the page is alive in the browser the view state also alive along with the page...
  • What is the difference between HTML control and ASP.Net control?
    • HTML control is created at client side and no interactions required with the server.
    • This also can be made interacted with the server by adding runat=”server” attribute.
    • ASP.Net control is created and rendered from server side.
  • What is the difference between web user control and web custom control?
    • Web user control is a control where the user can have visualizations and need to inherit from UserControl class.
    • This can be used in any page to use the functionality.
    • Web custom control -> Not answered.
  • What is the difference between the System Exceptions and Application exceptions?
    • System Exceptions are generic in nature and are intended to thrown by the .net framework.
    • Application Exceptions are the custom exceptions derived from ApplicationException base class and exceptions cover in the developed application.
  • How do you do error handling in ASP.net?
    • Error handling can be done either through web.config of Global.asax files.
    • They can also be page level or application level.
    • They can also be used try … catch… finally….. for the purpose.
    • Errors can also be logged in Event log, text file or database…
  • What is the difference between Response.Redirect, Server.Transfer, Server.Execute and CrossPagePosting?
    • Response.Redirect -> redirect the page to the specified page.
    • Server.Transfer -> Redirect the page to the specified page but the address bar still shows the old URL only.
    • Server.Execute -> Executes the specified URL content.
    • CrosspagePosting -> Not answered.
  • What is a webservice? Advantages of the same?
    • Webservice is a service where it contains the programmable logic and can be accessible via protocols (SOAP).
    • It is very simple and easy to understand.
  • What is SOA?
    • SOA is Service Oriented Architecture. It provides principles of concepts on how the application has to be architecture by having service layers (Application Service layer, Domain Service Layers, Database Service layers ..).
    • Explained the architectural concepts here.
  • How to handle the scenario (given) for Performance?
  • How do you maintain logging in the application?
    • Logs can be maintained in the application with various levels and is used to understand how the application is working.
    • Also will be used to identify the errors.
    • Administering the application is easy if logs are available
  • What are the best practices do you follow?
    • Best practices given here..
  • How do you implement workflow?
    • Workflow can be either sequential or state-machine.
    • Before WWF, used to have roles in Database to execute workflow based applications.
    • Scenario explained here.
Happy interviewing... !!!

~ Gangadhar Kotu

Friday, September 18, 2009

.Net Framework Features

I have been searching in the net where I can get all the features of the .Net framework product. Here is what Microsoft has delivered as a release wise.

.Net 3.5 SP1 Overview

.Net 3.5 Overview

.Net 3.0 Overview

.Net 2.0 Overview
  • 64-bit support
  • Access Control List (ACL) support
  • ADO.Net MSDN
    • Managed Providers
      • Server Enumeration
      • Asynchronous Processing
      • Multiple Active Result Sets (MARS) - Usage
      • Bulk Copy Operations here
      • SQL Server Max data types - varchar(max), nvarchar(max), varbinary(max) - work with large value types
      • SQL Server User-defined types
      • SQL Server notifications
      • Transactions with SQL Server snapshot Isolation usage
      • Database mirroring in SQL Server 2005 here
      • Provider Statistics usage
      • Change password in SQL Server 2005 here
      • Batch Processing
      • Tracing
      • Partial trust
      • Connection Pooling control usage
      • XML Datatype support
      • Integration with System.Transactions and Promotable transactions optimizations for SQL Server 2005
    • Disconnected Classes
      • DataTableReader object usage
      • Binary serialization for DataSet
      • DataTable as a standalone object
      • Create DataTable from DataView object
      • Schema Inference Engine enhancements
      • Namespace qualified Tables
      • Load method for DataTable and DataSet
      • RowState control (new methods SetAdded and Set Modified for DataTable and DataRow)
      • Enhanced support for custom defined types
      • IndexOf method on DataTable.Rows collections.
      • SetOrdinal method to change the position of the column in DataTable.
      • DataView performance improvements
    • Provider-Independent APIs
      • .Net Data provider Enumeration
      • Provider Independent API
      • Schema Discovery
  • ASP.Net here
  • Authenticated streams
  • COM Interop service enhancements
  • Console class additions
  • Data Protection API
  • Debugger display attributes
  • Debugger Edit and continue support
  • Detecting change in Network connectivity (NetworkChange class)
  • Distributed computing
  • Eventlog Enhancements
  • Expanded Certificate Management
  • FTP Support
  • Generics and Generic collections
  • Globalization
  • I/O Enhancements
  • Manifest-based Activation
  • .Net Framework Remoting
  • Obtaining local Network information - System.Net.NetworkInformation class
  • Ping class
  • HttpListener class
  • Programmatic control of caching - System.Net.Cache class
  • C# 2.0 here
  • Visual Basic 2.0 here
  • Security Exception class System.Security.SecurityException
  • I/O device support - SerialPort class
  • Version-tolerant serialization here
  • SMTP support
  • Strongly typed resource support Resource File generator (ResGen.exe)
  • Threading Improvements
  • Trace data filtering
  • Transactions System.Transactions class
  • Web services - asynchronous calls to web methods
  • Windows Forms features
    • ClickOnce deployment here
    • Application Settings here
    • New Data-binding model
    • New controls
      • DataGridView control here
      • ToolStrip control here
      • MaskedTextBox control here
      • SoundPlayer class here
      • SplitContainer control here
      • ListView control enhancements - tile view, grouping and drag-and-drop item repositioning
      • WebBrowser control here
      • FlowLayoutPanel control here
      • TableLayoutPanel control here
      • BackgroundWorker control here
      • Asynchronous Pattern for Components here
  • XML-Related features
    • XmlReader
    • XmlWriter
    • XPathNavigator

.Net 1.1 Overview
  • ASP.Net Mobile controls
  • ADO.Net
    • Data provider for ODBC, namespace System.Data.Odbc
    • DataReader object has "HasRows" property.
    • Connection object has "EnlistDistributedTransaction" method to perform transactions.
  • Side-by-Side execution (MSDN)
  • Security
    • AllowPartiallyTrustedCallersAttribute added to the assemblies System.Web.dll, System.Web.Mobile.dll and System.Web.RegularExpressions.dll (MSDN).
    • <> tag support in web.config for ASP.Net
  • IPv6 Support for Protocols

Happy coding... !!!

~ Gangadhar Kotu

ASP.Net features

I have been searching in the net where I can get all the features of the ASP.Net product. Here is what Microsoft has delivered as a release wise.

ASP.Net 3.5 SP1

ASP.Net 3.5

ASP.Net 3.0

ASP.Net 2.0

ASP.Net 1.1

Happy coding... !!!

~ Gangadhar Kotu

Asset Picker field type

In one of my project, I had to create a field type in MOSS with Asset picker functionality. Custom field types are very useful when you are creating custom functionality in MOSS 2007. The following example shows how to provide a functionality to select the document/list item/ from the site. The would be helpful to the user selecting the URL rather typing everything (there is a possibility of typos :) ). We are going to use 'AssetUrlSelector' class from Microsoft.SharePoint.Publishing.WebControls namespace for the purpose.

Create a custom field class by inheriting from SPFieldText class.

public class RelationshipField : SPFieldText {
// Methods

public RelationshipField(SPFieldCollection fields, string fieldName) : base(fields, fieldName) {}

public RelationshipField(SPFieldCollection fields, string typeName, string displayName) : base(fields, typeName, displayName)


// Properties

public override BaseFieldControl FieldRenderingControl




BaseFieldControl control = new RelationshipFieldControl();

control.FieldName = base.InternalName;

return control;




Create a control class by inherting from BaseFieldControl class. and also need to include the following namespaces.

using Microsoft.SharePoint;

using Microsoft.SharePoint.Publishing.WebControls;

using Microsoft.SharePoint.WebControls;

Here is how the control creation goes:

public class RelationshipFieldControl : BaseFieldControl


protected AssetUrlSelector urlSelector;
protected override void OnLoad(EventArgs e)


// Set the value if this is a postback.

if (this.Page.IsPostBack && base.ControlMode == SPControlMode.Edit)


this.ListItemFieldValue = urlSelector.AssetUrl;


protected override void CreateChildControls()


// Add the asset picker when in edit mode.

if (base.ControlMode == SPControlMode.Edit)


urlSelector = new AssetUrlSelector();



protected override void Render(HtmlTextWriter output)

// If this is edit mode and has a value, set the picker.

if (base.ControlMode.Equals(SPControlMode.Edit)

&& this.ListItemFieldValue != null)


this.urlSelector.AssetUrl = this.ListItemFieldValue.ToString();





To register the custom field created above, you need to create a field type definition file as show below. And this xml file needs to be copied to 12\TEMPLATE\XML directory to recognize by MOSS.







Happy Coding... !!

~ Gangadhar Kotu