(c) 2002 Visual Studio magazine 
Fawcette Technical Publications

Installation Steps
------------------
0. Install the SOAP Toolkit (that you can find on the Microsoft web site).
   (Note that this adds the WSDL App Mapping to your web server.)

1. Extract the contents of UploadServiceWebroot.zip into your wwwroot
   folder, and then use Internet Services Manager to mark the folder
   UploadService as an application.  You must remove Anonymous
   access from the directory security so that the web can see the
   user's login authentication (Integrated Windows Authentication should
   be the only option checked).

2. Extract and run the scripts in the SQLScripts.zip file against your
   SQL Server instance in the appropriate order.  You will need to change
   the GRANT lines to your particular login (found in scripts step1 & step3).

3. Adjust the datalink.udl file with your specific database authentication.
   (Note that the datalink file is purposely above the webroot so that no
   one can browse to it -- with the assumption that on a production box
   the parent folder would not be browseable.)



How the Service Handles Concurrency Problems
--------------------------------------------
A good example of a concurrency problem is this: lets say on Monday Ben
requests a workbook for XYZ credit union.  Then on Tuesday Laura requests
a workbook for XYZ credit union.  Laura is quicker at her modifications than
Ben, and she uploads her workbook on Thursday.  Meanwhile Ben does not try
to upload his data until Friday.  But after Lauras upload, the snapshot of
XYZ credit union data on the server is newer than the data set Ben had when
he downloaded his workbook.  If he were to allowed to upload he would wipe
out Lauras changes without knowing they were there.  Therefore when he tries
to upload on Friday, he is not allowed.  Instead he must request a new copy
of the workbook before he can successfully upload.  After reviewing Laura's
changes to the data, Ben may decide he doesn't need to upload after all.

I could have put logic in the download page to deny any request for workbooks
that have been downloaded but not yet uploaded.  But the reason I didnt do
that is because the likelihood of this happening is small, and the requirements
were to make the process as least-restrictive as possible.


Excel Workbook Notes
--------------------
1.  Named Ranges on the Main Sheet
	If you look at the named ranges in the workbook you will notice that
	one range in particular was defined directly on the main sheet instead
	of on one of the hidden sheets.  This was simply a case where I could
	use the range as-is on the main sheet.  However I had to take an
	additional step of hiding the column headers from view on the main
	sheet.  They are still contained in the range but users cannot see them.
2.  Editing the workbook
	To set up the workbook for edits, run the EditWorkbook macro.  This
	exposes all hidden sheets, headers, and unlocks the cells.  To set up
	the workbook for production, run the LockWorkbook macro.
3.  sendDataLo function
	You will notice two "send" functions in the workbook, sendDataHi() and
	sendDataLo().  sendDataLo is an example of using low-level SOAP API calls
	to communicate with the service.  But the server pages are not currently
	set up to handle low-level requests -- that would be an exercise for the reader.