Imports System.Web.Services
Imports System.Configuration
Imports System.IO
<WebService(Namespace:="http://www.dynamics-apps.com")> _
Public Class FileServer
??? Inherits System.Web.Services.WebService
#Region " Web Services Designer Generated Code "
??? Public Sub New()
??????? MyBase.New()
??????? 'This call is required by the Web Services Designer.
??????? InitializeComponent()
??????? 'Add your own initialization code after the InitializeComponent() call
??? End Sub
??? 'Required by the Web Services Designer
??? Private components As System.ComponentModel.IContainer
??? 'NOTE: The following procedure is required by the Web Services Designer
??? 'It can be modified using the Web Services Designer.?
??? 'Do not modify it using the code editor.
??? <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
??????? components = New System.ComponentModel.Container()
??? End Sub
??? Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
??????? 'CODEGEN: This procedure is required by the Web Services Designer
??????? 'Do not modify it using the code editor.
??????? If disposing Then
??????????? If Not (components Is Nothing) Then
??????????????? components.Dispose()
??????????? End If
??????? End If
??????? MyBase.Dispose(disposing)
??? End Sub
#End Region
??? Private Shared WebServerPath As String = ConfigurationSettings.AppSettings("WebServerRootPath")
??? Public Enum FileExtensions
??????? htm
??????? html
??????? asp
??????? aspx
??????? jpg
??????? gif
??????? dll
??????? exe
??????? all
??? End Enum
??? Public Class FileInformation
??????? Public Name As String
??????? Public Size As Long
??????? Public CreadedDate As DateTime
??????? Public LastModified As DateTime
??????? Public LastAccess As DateTime
??????? Public FileType As String
??????? Public FileLocation As String
??????? Public FileContent As Byte()
??? End Class
??? <WebMethod(Description:="Retrieve a boolean indicating if Path exists or not in WebServer")> _
??? Public Function DirectoryExists(ByVal Path As String) As Boolean
??????? Dim di As New DirectoryInfo(WebServerPath & Path)
??????? Return di.Exists
??? End Function
??? <WebMethod(Description:="Retrieve a boolean indicating if File exists or not in WebServer")> _
??? Public Function FileExists(ByVal Path As String,ByVal FileName As String) As Boolean
??????? Dim di As DirectoryInfo
??????? Dim fi As FileInfo
??????? Try
??????????? di = New DirectoryInfo(WebServerPath & Path)
??????????? If Not di.Exists Then
??????????????? Return False
??????????????? Exit Function
??????????? End If
??????????? Dim afi As FileInfo() = di.GetFiles()
??????????? For Each fi In afi
??????????????? If fi.Name = FileName Then
??????????????????? Return True
??????????????????? Exit For
??????????????? End If
??????????? Next
??????? Catch
??????????? Return False
??????? End Try
??? End Function
??? <WebMethod(Description:="Retrieve an array of files with name,attributes and content.")> _
??? Public Function Browse(ByVal VirtualPath As String,ByVal FileExtension As FileExtensions) As FileInformation()
??????? Dim i As Integer
??????? Dim fi As FileInfo
??????? Dim aFiles As FileInformation()
??????? Dim mExtension As String
??????? Select Case FileExtension
??????????? Case FileExtensions.asp
??????????????? mExtension = "asp"
??????????? Case FileExtensions.aspx
??????????????? mExtension = "aspx"
??????????? Case FileExtensions.gif
??????????????? mExtension = "gif"
??????????? Case FileExtensions.htm
??????????????? mExtension = "htm"
??????????? Case FileExtensions.html
??????????????? mExtension = "html"
??????????? Case FileExtensions.jpg
??????????????? mExtension = "jpg"
??????????? Case FileExtensions.dll
??????????????? mExtension = "dll"
??????????? Case FileExtensions.exe
??????????????? mExtension = "exe"
??????????? Case FileExtensions.all
??????????????? mExtension = "*"
??????? End Select
??????? Dim di As New DirectoryInfo(WebServerPath & VirtualPath)
??????? Dim afi As FileInfo() = _
???????? di.GetFiles("*." & mExtension)
??????? ReDim Preserve aFiles(afi.Length - 1)
??????? For Each fi In afi
??????????? aFiles(i) = New FileInformation()
??????????? aFiles(i).Name = fi.Name
??????????? aFiles(i).Size = fi.Length
??????????? aFiles(i).LastAccess = fi.LastAccessTime
??????????? aFiles(i).CreadedDate = fi.CreationTime
??????????? aFiles(i).LastModified = fi.LastWriteTime
??????????? aFiles(i).FileType = fi.Extension
??????????? aFiles(i).FileLocation = fi.DirectoryName
??????????? aFiles(i).FileContent = ReadFile(WebServerPath & VirtualPath & "/" & fi.Name)
??????????? i += 1
??????? Next
??????? Return aFiles
??? End Function
??? <WebMethod(Description:="Retrieve a single file.")> _
??? Public Function GetFile(ByVal VirtualPath As String,ByVal FileName As String) As Byte()
??????? Return ReadFile(WebServerPath & VirtualPath & "/" & FileName)
??? End Function
??? Private Shared Function ReadFile(ByVal FilePath As String) As Byte()
??????? Dim fs As FileStream
??????? Try
??????????? ' Read file and return contents
??????????? fs = File.Open(FilePath,FileMode.Open,FileAccess.Read)
??????????? Dim lngLen As Long = fs.Length
??????????? Dim abytBuffer(CInt(lngLen - 1)) As Byte
??????????? fs.Read(abytBuffer,CInt(lngLen))
??????????? Return abytBuffer
??????? Catch exp As Exception
??????????? Return Nothing
??????? Finally
??????????? If Not fs Is Nothing Then
??????????????? fs.Close()
??????????? End If
??????? End Try
??? End Function
??? <WebMethod(Description:="Upload a single file to web server.")> _
??? Public Function UploadFile(ByVal VirtualPath As String,ByVal Name As String,ByVal Content As Byte()) As Boolean
??????? Dim objFile As File,objStream As StreamWriter,objFstream As FileStream
??????? Try
??????????? objFstream = File.Open(WebServerPath & VirtualPath & "/" & Name,FileMode.Create,FileAccess.Write)
??????????? Dim lngLen As Long = Content.Length
??????????? objFstream.Write(Content,CInt(lngLen))
??????????? objFstream.Flush()
??????????? objFstream.Close()
??????????? Return True
??????? Catch exc As System.UnauthorizedAccessException
??????????? Return False
??????? Catch exc As Exception
??????????? Return False
??????? Finally
??????????? If Not objFstream Is Nothing Then
??????????????? objFstream.Close()
??????????? End If
??????? End Try
??? End Function
#Region " Helper Function "
??? <WebMethod(Description:="Retrieves version & copyright information about this web service.")> Public Function About() As String
??????? ' Uses the StringWriter to build a string with carriage returns & line feeds to
??????? ' return back to a calling client the Title,Version,and Description by
??????? ' reading Assembly meta-data originally entered in the AssemblyInfo.vb file
??????? ' using the AssemblyInfo class defined in the same file.
??????? Try
??????????? Dim sw As New System.IO.StringWriter()
??????????? Dim ainfo As New AssemblyInfo()
??????????? With sw
??????????????? .WriteLine(ainfo.Title)
??????????????? .WriteLine(String.Format("Version {0}",ainfo.Version))
??????????????? .WriteLine(ainfo.Copyright)
??????????????? .WriteLine("")
??????????????? .WriteLine(ainfo.Description)
??????????????? .WriteLine("")
??????????????? .WriteLine(ainfo.CodeBase)
??????????? End With
??????????? Dim strRetVal As String = sw.ToString
??????????? sw.Close()
??????????? Return strRetVal
??????? Catch exp As Exception
??????????? Return exp.Message
??????? End Try
??? End Function
#End Region
End Class