Click here to Skip to main content
15,868,144 members
Articles / Web Development / ASP.NET

Thin Client for Microsoft Visual SourceSafe on Pocket PC / SmartPhones

Rate me:
Please Sign up or sign in to vote.
4.21/5 (13 votes)
25 May 2004CPOL9 min read 61.7K   267   24   4
Thin client for Microsoft Visual SourceSafe on Pocket PC / SmartPhones targeting .NET Compact Framework.

Introduction

VSSThinClientSmart is a thin-client for Microsoft® Visual SourceSafe. The application targets the .NET Compact Framework and the .NET Framework to provide a user-friendly GUI to access a Visual SourceSafe database over a network from a Pocket PC / SmartPhone. The application exploits most of the major features of the .NET framework.

This product is a submission for the mobile contest.

Snaps

VSSThinClientSmart Login!

VSSThinClientSmart in Action!

Motivation

Obviously, the prime motivation are CodeProject and HP! :) But, when I started to think about what I was going to develop for this contest, I was thinking like what I would expect on my Pocket PC if I am given a chance. I am working in a Software Development MNC and I have faced numerous situations wherein we need to view/verify a code when we were in a conference/chat. Though we have a computer in the conference room, we cannot provide network access to our code base directly to a common computer. Even if I had an option of a Pocket PC, I had no way to access our codebase. So, I thought it would be better if I can come up with an application to help many people around the world... and here it is!!!! A VSS ThinClient for Pocket PCs and SmartPhones.

Overall Design

Let me explain about the design of my application so that you can understand and appreciate the features better. VSSThinClientSmart is not a single application, but has a WebSerivce - VSSClientWebSerivce (on .NET) and a client application - VSSThinClientSmart (on .NET Compact). As you might guess, the WebService is the one that runs on the host workstation and is going to react on VSS, on behalf of the client application. The client application and the WebService communicate through SOAP and do the job. This is why I call the application as thin-client rather than just a client.

The picture would give you a clear view of the design.

Overall Design Architecture of VSSThinClientSmart

Features

Although the webservice forms part of the whole application, let me talk about the client application first. More about the webservice in the Development section. VSSThinClientSmart provides almost all the commonly expected actions on SourceSafe, when in mobile. Here are the features..

Secured Login

You need to login to the VSSDatabase before proceeding with any operation on the VSSDatabase. VSSThinClientSmart provides you with a login screen as shown in the "Snaps" section. The user should enter the following information:

  • Username - username as in the VSS database
  • Password - password for the user
  • Database - this is the most important, because the path of the srcsafe.ini file must be as per the visibility from the host computer (not from Pocket PC). If your VSS database is on a different server machine than the host computer, the Pocket PC need not have access to the server machine at all. It is enough if your host computer is connected to both the server and your Pocket PC. This ensures greater security, no?

The Webservice will provide a unique session ID on successful login, which would be internally maintained by the client application. This session ID will be used by the client application to authenticate itself for every operation after that.

Browse through the entire database

On successful login, the user will be provided with a UI to browse through the entire database and menus to perform all the provided operations on the database. VSSThinClientSmart provides you with a Main screen as shown in the "Snaps" section. The tree view at the top displays the list of Projects available as per the hierarchy. On selecting a particular project in the tree view, the list of files under the selected project will be displayed in the list box provided below the tree view.

Note: VSSThinClientSmart will not expand all the Projects by default. So, you can see the subprojects only on clicking on a particular project in the Projects view. This is done for optimizing the number of requests to the Webservice.

Files

VSSThinClientSmart provides you with a number of operations that can be performed on a file. Every operation has to be performed only after selecting a particular file from the Files list; failing which, would be reported with an appropriate error.

Operations on a file:

  • Get Latest Version
  • Delete
  • Destroy Permanently
  • View File Properties

All these operations are available in the File menu on the client application.

File Menu showing various operations on File

Get Latest Version - Example

Get Latest Version

Get Latest Version aids to obtain the latest version of the selected file. On successful retrieval, a Save-File dialog will be opened to select a particular location to store the file. After that, the application also would ask if the user wants to open that file. The picture shown above, shows a .jpg file opened in Internet Explorer as per user selection.

Delete / Destroy Permanently

Delete a file, aids to delete the selected file. On clicking Delete, the user would be asked if he wants to delete the file permanently. If the user chooses No, the file will be deleted temporarily and shall be recovered later (though not from VSSThinClientSmart). If the user chooses Yes, the file will be destroyed permanently and can no longer be recovered (not only from VSSThinClientSmart).

View File Properties

Clicking on Properties aids the user to view the various properties of the selected file, like file name, size, checked out status etc.

Projects

VSSThinClientSmart provides you with a number of operations that can be performed on a project. Every operation has to be performed only after selecting a particular project from the Projects tree; failing which, would be reported with an appropriate error.

Operations on a Project:

  • Delete
  • Destroy Permanently
  • Label

All these operations are available in the Project menu on the client application.

Project Menu showing various operations on Project

Label Project - Example

Delete / Destroy Permanently

The information about deleting a file and deleting a project are almost the same. Delete a Project, aids to delete the selected Project. On clicking Delete, the user would be asked if he wants to delete the Project permanently. If the user chooses No, the Project will be deleted temporarily and shall be recovered later. If the user chooses Yes, the Project will be destroyed permanently and can no longer be recovered.

Label

Clicking on Label aids to label the selected Project. The user would be asked for the Label Name and the Comment for the label. That's it. If the labeling action is successful, VSSThinClientSmart will report the success and switch back to the Main screen.

Customize View (based on File/Project status)

The user can customize the view by selecting one or more options from the View menu. The options are check options, so can be enabled or disabled using the same menu. Following are the modes of customization available to the user.

  • Show only deleted files
  • Show only checked-out files

All these operations are available in the View menu on the client application.

View Menu showing various view options

Show only deleted files

Clicking on Show only deleted files makes the File view to show only those files which have been deleted (i.e. temporarily).

Show only checked-out files

Clicking on Show only checked-out files makes the File view to show only those files which have been checked out (either by the current user or any other user). This is applicable only for files.

Note: a tick mark will be shown in front of the menu item if the item is enabled.

Development

I developed this application using Microsoft® Visual Studio .NET 2003 with Pocket PC 2002 Emulator. Though I can't walk you through the entire code-base, I shall say about the methods supported in my webservice.

VSSClientWebService supports the following methods:

  • OpenDatabase

    Used to login into a VSS database and create a session.

  • GetItemsInFolder

    Used to obtain the list of subprojects and files under a given project.

  • CloseDatabase

    Closes the database and destroys the session.

  • Delete

    Used to delete a file or project, temporarily or permanently.

  • GetFileInfo

    Used to obtain the properties of the specified file.

  • LabelProject

    Used to label a project.

  • GetFile

    Used to obtain the latest version of a given file.

Development Platforms

  • WebService: .NET Framework 1.1
  • Client application: .Net Compact Framework 1.0 SP2
  • Emulator: Pocket PC 2002 Emulator

How things work

The webservice that I have developed acts as a proxy VSS Automation Component to the client. All requests from the Pocket PC/Smart Phone are sent to the WebService and the Webservice instantiates the VSS Automation Component through the .NET Interop Services, and does the job on behalf of the client and returns back the result. This has been clearly depicted in the Overall Design Architecture. Once the user logs into the database successfully, a unique session is created for that user and is held in the Server (WebService) until the user closes the database.

Most of the WebMethods return a structure to provide necessary information to the client application. For example, the following is the ResponseXML returned from the OpenDatabase WebMethod.

XML
<OpenDatabaseResult>
  <bSucceeded>boolean</bSucceeded>
  <SessionId>string</SessionId>
  <ErrorMsg>string</ErrorMsg>
</OpenDatabaseResult>

If the OpenDatabase WebMethod fails, then the error information will be returned as string in <ErrorMsg> tag.

Similarly, the following is the response for GetFileInfo WebMethod:

XML
<GetFileInfoResult>
  <isValid>boolean</isValid>
  <FileName>string</FileName>
  <SizeInBytes>long</SizeInBytes>
  <isDeleted>boolean</isDeleted>
  <isCheckedOut>boolean</isCheckedOut>
</GetFileInfoResult>

These XMLs can be directly serialized/de-serialized as objects, due to the advent of .NET, and it's that easy!!

.NET features used

  • WebService
  • Serialization/De-serialization
  • Interop Services (RCW)

    This is how .NET Webservice accesses the VSS Automation COM Component.

  • Delegates

    All the functionalities are executed by the MainForm in the client application. When the user clicks on Label, to label a Project, the Label string and the Comment string are obtained in a different Windows Form. The MainForm provides a handler to the Label-Input form, as delegate to callback when the user is done providing the input. So, when the user provides the input strings and clicks the "Label" button in the Label-Input form, the user-inputs are given to the Main Form using a delegate (LabelProjectHandler) to proceed with the execution.

What's Next

Although this application implements most of the commonly expected operations on VSS when in mobile, there are a few more operations like check-out/check-in which would enrich the application still further. The next version on this, shall include all those capabilities.

References

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
India India
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions

 
Generalwant your advice Pin
ahmedfathy14-Jun-07 3:34
ahmedfathy14-Jun-07 3:34 
GeneralConnect Database Pin
dailywake19-Mar-05 6:57
dailywake19-Mar-05 6:57 
GeneralRe: Connect Database Pin
leechangjun29-Mar-11 22:03
leechangjun29-Mar-11 22:03 
GeneralError Pin
Member 131779315-Sep-04 22:10
Member 131779315-Sep-04 22:10 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.