MS Integration Services und fileOps
This commit is contained in:
195
SERVICES/DDEDM_NetworkService/EDMService.vb
Normal file
195
SERVICES/DDEDM_NetworkService/EDMService.vb
Normal file
@@ -0,0 +1,195 @@
|
||||
Imports System.ServiceModel
|
||||
Imports DigitalData.Modules.Database
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports DigitalData.Modules.Filesystem
|
||||
Imports System.IO
|
||||
Imports DigitalData.Services.EDMService
|
||||
|
||||
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession)>
|
||||
Public Class EDMService
|
||||
Implements IEDMService
|
||||
Implements IDisposable
|
||||
|
||||
Public Shared Event ClientConnectedEvent As EventHandler(Of Session)
|
||||
Public Shared Event ClientDisconnectedEvent As EventHandler(Of Session)
|
||||
|
||||
Public Shared LogConfig As LogConfig
|
||||
Public Shared Database As Firebird
|
||||
Public Shared AppConfig As AppConfig
|
||||
|
||||
Private ReadOnly _session As Session
|
||||
Private ReadOnly _logger As Logger
|
||||
|
||||
Private _request As Request = Nothing
|
||||
Private _debug As Boolean = False
|
||||
|
||||
Public Sub New()
|
||||
Dim oOperationContext As OperationContext = OperationContext.Current
|
||||
Dim oInstanceContext As InstanceContext = oOperationContext.InstanceContext
|
||||
Dim oUsername = oOperationContext.ServiceSecurityContext.WindowsIdentity.Name
|
||||
|
||||
_logger = LogConfig.GetLogger()
|
||||
_session = New Session(oUsername)
|
||||
|
||||
RaiseEvent ClientConnectedEvent(Me, _session)
|
||||
End Sub
|
||||
|
||||
Public Sub Dispose() Implements IDisposable.Dispose
|
||||
RaiseEvent ClientDisconnectedEvent(Me, _session)
|
||||
End Sub
|
||||
|
||||
#Region "Request"
|
||||
Public Function CreateDatabaseRequest(Name As String, Optional Debug As Boolean = False) As String Implements IEDMService.CreateDatabaseRequest
|
||||
_request = New Request(Name, _session.Username, Database, Debug)
|
||||
_debug = Debug
|
||||
|
||||
_logger.Info("Creating request {0}/{1}", _request.Name, _request.RequestId)
|
||||
|
||||
Return _request.Name
|
||||
End Function
|
||||
|
||||
Public Sub CloseDatabaseRequest() Implements IEDMService.CloseDatabaseRequest
|
||||
If IsNothing(_request) Then
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
_logger.Info("Closing request {0}", _request.ToString)
|
||||
_request.Connection.Close()
|
||||
_request = Nothing
|
||||
End Sub
|
||||
|
||||
#End Region
|
||||
#Region "Database"
|
||||
Private Sub TestRequestCreated()
|
||||
If IsNothing(_request) Then
|
||||
Throw New Exceptions.NoRequestException()
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Function ReturnDatatable(SQL As String) As TableResult Implements IEDMService.ReturnDatatable
|
||||
Try
|
||||
TestRequestCreated()
|
||||
|
||||
_logger.Info($"ReturnDatatable, SQL: {SQL}")
|
||||
_request.LogDebug($"ReturnDatatable, SQL: {SQL}")
|
||||
|
||||
Dim oResult As DataTable = Database.GetDatatableWithConnection(SQL, _request.Connection)
|
||||
Return New TableResult(True, oResult, Nothing)
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
_request.LogError(ex.Message)
|
||||
Return New TableResult(False, Nothing, ex.Message)
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function ReturnScalar(SQL As String) As ScalarResult Implements IEDMService.ReturnScalar
|
||||
Try
|
||||
TestRequestCreated()
|
||||
|
||||
_logger.Info($"ReturnScalar, SQL: {SQL}")
|
||||
_request.LogDebug($"ReturnScalar, SQL: {SQL}")
|
||||
|
||||
Dim oResult As Object = Database.GetScalarValueWithConnection(SQL, _request.Connection)
|
||||
Return New ScalarResult(True, oResult, Nothing)
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
_request.LogError(ex.Message)
|
||||
Return New ScalarResult(False, Nothing, ex.Message)
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function ExecuteNonQuery(SQL As String) As NonQueryResult Implements IEDMService.ExecuteNonQuery
|
||||
Try
|
||||
TestRequestCreated()
|
||||
|
||||
_logger.Info($"ExecuteNonQuery, SQL: {SQL}")
|
||||
_request.LogDebug($"ExecuteNonQuery, SQL: {SQL}")
|
||||
|
||||
Dim oResult As Boolean = Database.ExecuteNonQueryWithConnection(SQL, _request.Connection)
|
||||
Return New NonQueryResult(True, Nothing)
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
_request.LogError(ex.Message)
|
||||
Return New NonQueryResult(False, ex.Message)
|
||||
End Try
|
||||
End Function
|
||||
|
||||
|
||||
#End Region
|
||||
#Region "FileContainer"
|
||||
Private Function GetFilePath(ContainerId As String) As String
|
||||
Return Path.Combine(AppConfig.ContainerPath, ContainerId & ".enc")
|
||||
End Function
|
||||
Private Sub TestFileExists(ContainerId)
|
||||
Dim oContainerPath = GetFilePath(ContainerId)
|
||||
|
||||
If Not IO.File.Exists(oContainerPath) Then
|
||||
Throw New FileNotFoundException("Container existiert nicht", oContainerPath)
|
||||
End If
|
||||
End Sub
|
||||
|
||||
Public Function GetFile(ContainerId As String) As ContainerResult Implements IEDMService.GetFile
|
||||
Try
|
||||
TestFileExists(ContainerId)
|
||||
|
||||
Dim oContainerPath = GetFilePath(ContainerId)
|
||||
Dim oContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oContainerPath)
|
||||
|
||||
Dim oResult As New ContainerResult With {
|
||||
.Container = oContainer.GetFile()
|
||||
}
|
||||
|
||||
Return oResult
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
Return New ContainerResult(ex.Message)
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function CreateFile(Contents() As Byte, Extension As String) As String Implements IEDMService.CreateFile
|
||||
Try
|
||||
Dim oContainer As FileContainer = FileContainer.Create(LogConfig, AppConfig.ContainerPassword)
|
||||
Dim oContainerId As String = oContainer.FileId
|
||||
|
||||
oContainer.SetFile(Contents, Extension)
|
||||
oContainer.SaveAs(GetFilePath(oContainerId))
|
||||
|
||||
Return oContainerId
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function UpdateFile(FileId As String, Contents() As Byte) As String Implements IEDMService.UpdateFile
|
||||
Try
|
||||
TestFileExists(FileId)
|
||||
|
||||
Dim oFilePath = GetFilePath(FileId)
|
||||
Dim oFileContainer As FileContainer = FileContainer.Load(LogConfig, AppConfig.ContainerPassword, oFilePath)
|
||||
|
||||
oFileContainer.SetFile(Contents, oFileContainer.Extension)
|
||||
oFileContainer.Save()
|
||||
|
||||
Return oFileContainer.FileId
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
Return Nothing
|
||||
End Try
|
||||
End Function
|
||||
|
||||
Public Function DeleteFile(FileId As String) As Boolean Implements IEDMService.DeleteFile
|
||||
Try
|
||||
TestFileExists(FileId)
|
||||
|
||||
Dim oFilePath = GetFilePath(FileId)
|
||||
IO.File.Delete(oFilePath)
|
||||
|
||||
Return True
|
||||
Catch ex As Exception
|
||||
_logger.Error(ex)
|
||||
Return False
|
||||
End Try
|
||||
End Function
|
||||
#End Region
|
||||
End Class
|
||||
Reference in New Issue
Block a user