Using a Web Service to Coordinate a Shared File s Use

Using a Web Service to Coordinate a Shared File’s Use

To manage program source code within projects that allow multiple programmers to access and edit programs, many organizations employ source-code control systems. In general, the systems control which programmers can access specific source-code files and how. In this way, two programmers do not unknowingly make changes to the same file at the same time. In a similar way, many project-team environments exchange Word documents, Excel documents, and other documents on a regular basis. To better manage which team members can view or change a project document’s contents, many companies use “librarian-like” software that lets users “check out” a project document for read or write operations and then later return the document after the user finishes editing it.

By using a web service, you can build a similar file-control system. The FileLibrary web service in Listing 13.10 lets users check files into and out of the server’s ProjectFiles folder. To use the web service, you must create the ProjectFiles folder and CheckedOut subfolder on your server. The web service provides the following methods:

string() AvailableFiles() byte() CheckoutFile(String Filename) Integer FileUpload(Byte() FileData(),  String Name)

To create the FileLibrary web service, perform these steps:

  1. Within Visual Studio .NET, select the File menu New Project option. Visual Studio .NET will display the New Project dialog box.

  2. Within the New Project dialog box Project Types list, click Visual Basic Projects. Then, within the Templates field, click ASP.NET Web Service. Finally, within the Location field, specify the folder within which you want to store the program and the program name FileLibrary. Select OK. Visual Studio .NET will display a page onto which you can drag and drop the service’s components.

  3. Select the View menu Code option. Visual Studio .NET will display the program’s source code. Within the source code add the program statements in Listing 13.10.

Listing 13.10 FileLibrary.asmx.vb

start example
Imports System.IO <WebMethod()> Public Function AvailableFiles() As String()    AvailableFiles = Directory.GetFiles("C:\ProjectFiles") End Function <WebMethod()> Public Function CheckoutFile(ByVal Filename As String) _ Ä As Byte()      Dim InputFile As FileStream    Dim FileLength As Long    Try      InputFile = File.Open(Filename, FileMode.Open, _      Ä FileAccess.Read)      FileLength = InputFile.Length      Dim DataBuffer(FileLength - 1) As Byte      InputFile.Read(DataBuffer, 0, FileLength)      InputFile.Close()      File.Move(Filename, "C:\ProjectFiles\CheckedOut\" & _      Ä Path.GetFileName(Filename))      CheckoutFile = DataBuffer    Catch Ex As Exception      Throw New Exception("Unable to open specified file " & Filename)    End Try End Function <WebMethod()> Public Function FileUpload(ByVal FileData() As Byte, _ Ä ByVal Name As String) As Integer    Dim Status As Integer = 0    Dim OutputFile As FileStream    Dim FileLength As Long    Try      OutputFile = File.Open("C:\ProjectFiles\" & Name, _      Ä FileMode.Create, FileAccess.Write)      FileLength = FileData.Length      OutputFile.Write(FileData, 0, FileLength)      OutputFile.Close()      Status = 1      If (File.Exists("C:\ProjectFiles\CheckedOut\" & Name)) Then        File.Delete("C:\ProjectFiles\CheckedOut\" & Name)      End If    Catch Ex As Exception      Status = 0    End Try    FileUpload = Status End Function
end example

The web service provides three methods:

  • The first, AvailableFiles, returns an array of character strings that contain the names of files available in the ProjectFiles folder.

  • The second, CheckoutFile, lets a user retrieve a file from the ProjectFiles folder. After the method returns the file, it moves the file into the CheckedOut folder, which makes the file no longer available for users to check out.

  • The final method, FileUpload, lets a user upload a file to the ProjectFiles folder. If a user has previously checked out the file (meaning the file would reside in the CheckedOut folder), the method deletes the old copy.

Ideally, a file management program would use a database to track which users checked out each file (and would then allow only the user who had checked out the file to upload a new copy). Likewise, the program might restrict users to checking out files for either read or write access. Further, a more robust system would also allow for multiple versions of a file to exist.

The Visual Basic .NET program in Listing 13.11, AccessProjectFiles.vb, uses the FileLibrary web service to control access to the server’s ProjectFiles folder. When you run the program, it will display a form you can use to upload or download files to or from the server’s ProjectFiles folder, as shown in Figure 13.10.


Figure 13.10: Using a web service to manage file access

To create the AccessProjectFiles program, perform these steps:

  1. Within Visual Studio .NET, select the File menu New Project option. Visual Studio .NET will display the New Project dialog box.

  2. Within the New Project dialog box Project Types list, click Visual Basic Projects. Then, within the Templates field, click Windows Application. Finally, within the Location field, specify the folder within which you want to store the program and the program name AccessProjectFiles. Select OK. Visual Studio .NET will display a form onto which you can drag and drop the program’s controls.

  3. Using the Toolbox, drag and drop the button and text boxes, list box, label, and hyperlink label previously shown in Figure 13.10 onto the page.

  4. Select the Project menu Add Web Reference option. Visual Studio .NET will display the Add Web Reference dialog box.

  5. Within the Address field, type localhost/FileLibrary/Service1.asmx?WSDL and press Enter. The dialog box will load the file’s contents. Click the Add Reference button.

  6. Select the View menu Code option. Visual Studio .NET will display the program’s source code. Within the source code add the program statements in Listing 13.11.

Listing 13.11 AccessProjectFiles.vb

start example
Private Sub Page_Load(ByVal sender As System.Object, _ Ä ByVal e As System.EventArgs) Handles MyBase.Load    Try      Dim WS As New localhost.Service1()      Dim Filelist As String()      Filelist = WS.AvailableFiles()      Dim Str As String      If (ListBox1.Items.Count = 0) Then        For Each Str In Filelist          ListBox1.Items.Add(Str)        Next      End If    Catch Ex As Exception      TextBox2.Text = Ex.Message    End Try End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e _ Ä As System.EventArgs) Handles Button1.Click      Dim InputFile As Byte()    Dim WS As New localhost.Service1()    Dim Filename As String = ListBox1.SelectedItem.ToString()    If (Filename <> "") Then      Try        InputFile = WS.CheckoutFile(Filename)        Dim OutputFile As FileStream        Try          Filename = "C:\TEMP\" + Path.GetFileName(Filename)          OutputFile = File.Open(Filename, FileMode.Create, _          Ä FileAccess.Write)          OutputFile.Write(InputFile, 0, InputFile.Length)          OutputFile.Close()        Catch Ex As Exception          TextBox2.Text = "Error writing file " + Ex.Message        End Try        Dim Filelist As String()        Filelist = WS.AvailableFiles()        Dim Str As String        ListBox1.Items.Clear()        If (ListBox1.Items.Count = 0) Then          For Each Str In Filelist            ListBox1.Items.Add(Str)          Next        End If        Form.ActiveForm.Refresh()      Catch Ex As Exception        TextBox2.Text = ex.Message      End Try    End If End Sub Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As _ Ä System.EventArgs) Handles Button2.Click    Dim InputFile As FileStream    Dim FileLength As Long    If TextBox1.Text.Length > 0 Then      Try        TextBox2.Text = ""        InputFile = File.Open(TextBox1.Text, FileMode.Open, _        Ä FileAccess.Read)        FileLength = InputFile.Length        Dim DataBuffer(FileLength - 1) As Byte        InputFile.Read(DataBuffer, 0, FileLength)        InputFile.Close()        Dim WS As New localhost.Service1()        If WS.FileUpload(DataBuffer, Path.GetFileName(TextBox1.Text)) _        Ä = 1 Then          TextBox2.Text = "File upload successful"        Else          TextBox2.Text = "Error uploading file"        End If        Dim Filelist As String()        Filelist = WS.AvailableFiles()        Dim Str As String        ListBox1.Items.Clear()        If (ListBox1.Items.Count = 0) Then          For Each Str In Filelist             ListBox1.Items.Add(Str)        Next       End If       Form.ActiveForm.Refresh()     Catch Ex As Exception       Throw New Exception("Unable to open specified file")     End Try   End If End Sub
end example

When the program runs, the Page_Load method will use the FileLibrary web service to retrieve a list of the files that reside in the server’s ProjectFiles folder. The program assigns the filenames to a list box. If the user “checks out” a file from the ProjectFiles folder, the application will store the file in the C:\Temp folder on the user’s system. The program will then update the files that appear in the list box. In a similar way, if the user uploads a file to the server, the program will again update the file list.




. NET Web Services Solutions
.NET Web Services Solutions
ISBN: 0782141722
EAN: 2147483647
Year: 2005
Pages: 161
Authors: Kris Jamsa

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net