A Sneak Peek at New Services from Cold Rooster Consulting


Allen Wagner
Microsoft Corporation

August 1, 2001

The Favorites group, a part of the MSDN Architectural Samples Team, is letting me sneak in between their columns to present some future developments underway in our part of the team.

Following in the tradition of the Favorites sample, we have another pair of XML Web Services in the works: a ColdStorage Service and an Advertising Service. As per our team’s charter, along with the samples we produce, we’ll do our best to explain the problems we encountered and the decisions we made as a result. Those articles will appear on the MSDN Online Web Services home page.


Once again we’re approaching this project from the perspective of Cold Rooster Consulting, our fictitious Web Development Company. As Cold Rooster Consulting, our managers are always looking for more ways to showcase our development talent and find new revenue. The design decisions we made were from the perspectives of those managers.

Choosing the Services and a Revenue Model

After some heated discussion at the virtual Cold Rooster Consulting headquarters and a few virtual off-sites, we decided our first priority was to provide a compelling and useful service to our customers. With the number of devices that can access the Web growing at a significant pace, a file storage service seemed like a solid strategic choice. Using the service, our customers could potentially share important data files with any device capable of accessing the Web. We could also serve as a secure backup location for customer’s personal data. Though not revolutionary as a concept, implementing file storage as a Web Service might open a new market for this familiar idea.

Our next decision related to our target market. Our previous Web Service, Favorites, had targeted owners of portal sites as the customer of choice. This time around, however, we decided that the end-user would be our customer, without an intermediate licensee. This decision dictated that the revenue model for our next service would have to be either subscription-based or advertising-based. Since several competitors offered storage for free, our choice was made by the marketplace—to be competitive, our revenue model needed to be advertising-based.

To make our offering more attractive to potential advertisers, we decided to create an Advertising Web Service as well. The Advertising Service will provide bitmap graphics, and links to Web sites. It will also be able to group sets of advertisements in categories. If we can match categories to customer preferences, we can deliver advertisements that people actually want to see.

Picking a Platform and User Experience

Having picked the services, the customer, and the revenue model, the next decision we faced related to platform. The .NET Framework and Microsoft® Visual Studio® .NET were looming on the horizon and had a scheduled release date close to when we wanted to roll out our next service offering. If we could be ready to release in synch with a major technology rollout, we might be able to catch a portion of that technology wave. This would also give our development team an opportunity to work with the latest tools. We realized that this decision was not without risks, but we thought the upside was worth the gamble. The platform was set and the language of choice would be C#.

We also knew that creating the service alone would not be enough. We would need a user interface that would feel familiar to our average customer. We further wanted to guarantee that our advertisements would be seen, and would not be easy to de-couple from the ColdStorage Service. Finally, we wanted to add a control that could display our home page, and potentially drive customers to our site.

In terms of user experience, we wanted a rich and polished feel. We also wanted to provide flexibility in the ways that users interacted with the UI. For example, we felt customers should be able to drag files and folders from their PC and drop them on a ListView or TreeView to upload items to the ColdStorage Service, or, if they preferred, there should be a dialog-based method to upload or download files.

Based on time constraints, we decided not to do a full-blown Shell extension at this time, but wanted the user experience to be as similar to working with Microsoft® Windows® Explorer as possible. Ruling out a Web Form application, we chose to create a Windows Forms client-side application to maintain a Shell-like feeling. The application would contain a custom Windows Form control, composed of the three major user interface (UI) elements of our application: a TreeView, a ListView, and a new Advertising control. The CRC (Cold Rooster Consulting) Service Center was born.

Features of the Pending Sample

Here’s a brief overview of some of the issues and features we will be dealing with over the coming months.

Web Services


The Web Services were designed from the ground up with no dependencies on existing file storage standards or advertising standards. Both services use variations of a three-tiered approach, utilizing a data access layer to drive stored procedures in the database, and maintaining business logic where it was most efficient. We’ll discuss the design decisions regarding where the business logic lies and why we chose C# as our language of choice. We’ll also discuss some of the design options that we rejected along the way.

Database Design

Based on our preliminary performance testing, we decided early on to use Microsoft® SQL Server to hold both our customers’ files for the ColdStorage Service and the advertisements for the Advertising Service. We have gone through a couple of different database designs trying to optimize for scalability and performance. In future articles, we’ll discuss the reasons we chose SQL, the evolution of the database design, and why we took the approach we did.

Security and Authentication

On the ColdStorage Service, security of a customer’s files is critical. We also wanted a way to present specific groups of advertisements to specific users. To keep things simple for our customers, the Web Services and the rich client application contained in the sample will use Passport for authentication. Passport’s Single Sign In approach seemed to be a bonus for our customers, and the user’s Passport Identity had information we found useful, such as their e-mail address.

In future articles, we’ll show you how to use Passport outside the confines of the Web browser, and how to extract information from a customer’s Passport identity.


Consumers of CRC Services can come from any country worldwide. To accommodate our global customers, where possible, the SOAP exceptions thrown when errors occur will contain localized error messages based on the language preference indicated by the customer’s Passport identity.

Rich Client Development

As stated above, the UI for this sample will be Windows Forms-based. The components of the sample are as follows:

Advertising Control

The Advertising Control consumes the Advertising Service. In many ways, it resembles a Windows Forms version of the Web Forms AdRotator control, except that it accesses our Advertising Web Service, rather than connecting directly to a SQL database. It also has the capacity to deliver an offline experience.

ColdStorage Access Control

This control consumes the ColdStorage Service and provides a UI to interact with it. It also contains the Advertising Control. The contents of a user’s storage will be delivered to the control in XML form, which will be converted to a DataSet used by the TreeView and ListView sub-components of the control. We’ll take a look at the drag-and-drop feature, context menu handling, un-managed interaction with Shell APIs, plus a lot more.

CRC Service Center

The main UI elements of the application are a main menu, a status bar, and a TabControl. The top page of the TabControl will host a browser ActiveX® control. The second page contains the ColdStorage Access Control.

In Conclusion

That’s the sample in a nutshell. The articles related to the design, development, and decisions for each component should be appearing over the next couple of months. Within the next month, we’ll be putting up a beta version of the Web Services, and the client application will be available to download. As more information about the project becomes available, we’ll post it on the Cold Rooster home page, and on the Web Services home page. As always, we look forward to your feedback.


At Your Service

Allen Wagner is a member of the MSDN Architectural Samples team, and was previously a developer on the Windows Media Player team. While not at work, Allen and his wife are busy teaching their three-year-old daughter that not every question can be answered with “No, I don’t have to,” while their nine-month-old son silently takes notes on methods of parent manipulation.