This commit is contained in:
Jonathan Jenne 2023-11-23 10:23:16 +01:00
parent 200d6058cf
commit ee664f5512
5 changed files with 83 additions and 131 deletions

View File

@ -50,6 +50,7 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="DigitalDataController.vb" /> <Compile Include="DigitalDataController.vb" />
<Compile Include="IUselessModel.vb" />
<Compile Include="My Project\AssemblyInfo.vb" /> <Compile Include="My Project\AssemblyInfo.vb" />
<Compile Include="My Project\Application.Designer.vb"> <Compile Include="My Project\Application.Designer.vb">
<AutoGen>True</AutoGen> <AutoGen>True</AutoGen>
@ -67,6 +68,7 @@
<DesignTimeSharedInput>True</DesignTimeSharedInput> <DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile> </Compile>
<Compile Include="ServiceRegistrator.vb" /> <Compile Include="ServiceRegistrator.vb" />
<Compile Include="UselessModel.vb" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="My Project\Resources.resx"> <EmbeddedResource Include="My Project\Resources.resx">
@ -95,14 +97,6 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Reference Include="DigitalData.Modules.Database, Version=2.3.3.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DDModules\Database\bin\Debug\DigitalData.Modules.Database.dll</HintPath>
</Reference>
<Reference Include="DigitalData.Modules.Logging, Version=2.6.2.0, Culture=neutral, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\..\DDModules\Logging\bin\Debug\DigitalData.Modules.Logging.dll</HintPath>
</Reference>
<Reference Include="Interop.WINDREAMLib"> <Reference Include="Interop.WINDREAMLib">
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath> <HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WINDREAMLib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes> <EmbedInteropTypes>True</EmbedInteropTypes>
@ -119,10 +113,7 @@
<HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOTOOLLib.dll</HintPath> <HintPath>P:\Visual Studio Projekte\Bibliotheken\windream\Interop.WMOTOOLLib.dll</HintPath>
<EmbedInteropTypes>True</EmbedInteropTypes> <EmbedInteropTypes>True</EmbedInteropTypes>
</Reference> </Reference>
<Reference Include="Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f, processorArchitecture=MSIL"> <Reference Include="Microsoft.Practices.Unity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f" />
<SpecificVersion>False</SpecificVersion>
<HintPath>D:\ProgramFiles\windream\windream Web Service SDK\Libraries\3rdParty\Microsoft.Practices.Unity.dll</HintPath>
</Reference>
<Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL"> <Reference Include="NLog, Version=5.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath> <HintPath>..\packages\NLog.5.0.5\lib\net46\NLog.dll</HintPath>

View File

@ -1,7 +1,6 @@
Imports DigitalData.Modules.Database Imports System.Collections.Generic
Imports DigitalData.Modules.Logging
Imports System.Collections.Generic
Imports System.Data Imports System.Data
Imports System.Data.SqlClient
Imports System.Net Imports System.Net
Imports System.Net.Http Imports System.Net.Http
Imports System.Net.Http.Headers Imports System.Net.Http.Headers
@ -12,6 +11,7 @@ Imports System.Web.Http
Imports System.Web.Http.Controllers Imports System.Web.Http.Controllers
Imports System.Xml Imports System.Xml
Imports Windream.WebService.Documents Imports Windream.WebService.Documents
Imports Windream.WebService.Logging
Imports Windream.WebService.WebAPI.PlugIns Imports Windream.WebService.WebAPI.PlugIns
Imports WINDREAMLib Imports WINDREAMLib
Imports WMCNNCTDLLLib Imports WMCNNCTDLLLib
@ -22,14 +22,9 @@ Namespace Controllers
Public Class DigitalDataController Public Class DigitalDataController
Inherits PlugInBaseController Inherits PlugInBaseController
Private ReadOnly _routesSettings As IEnumerable(Of RouteSettings)
Private ReadOnly _docController As IDocumentsController Private ReadOnly _docController As IDocumentsController
Private _session As IWMSession6 Private _session As IWMSession6
Private _logger As ILogging
Private ReadOnly _logConfig As LogConfig
Private ReadOnly _logger As Logger
Private ReadOnly _database As MSSQLServer
''' <summary> ''' <summary>
''' Gets the routes settings for the controller. ''' Gets the routes settings for the controller.
@ -40,61 +35,21 @@ Namespace Controllers
''' </value> ''' </value>
Public Overrides ReadOnly Property RoutesSettings As IEnumerable(Of RouteSettings) Public Overrides ReadOnly Property RoutesSettings As IEnumerable(Of RouteSettings)
Get Get
Return _routesSettings Return New List(Of RouteSettings) From {
End Get
End Property
Public Overrides Function ExecuteAsync(controllerContext As HttpControllerContext, cancellationToken As CancellationToken) As Task(Of HttpResponseMessage)
Return MyBase.ExecuteAsync(controllerContext, cancellationToken)
End Function
''' <summary>
''' Initializes a new instance of the <see cref="DigitalDataController"/> class.
''' </summary>
Sub New()
MyBase.New()
Dim routesSettings As New List(Of RouteSettings) From {
New RouteSettings("DigitalDataController", "DigitalData/{action}/{id}", New With { New RouteSettings("DigitalDataController", "DigitalData/{action}/{id}", New With {
.id = RouteParameter.Optional, .controller = "DigitalData" .id = RouteParameter.Optional, .controller = "DigitalData"
}) })
} }
_routesSettings = routesSettings End Get
End Property
Dim oLogPath = GetLogPath() ''' <summary>
_logConfig = New LogConfig(LogPath:=LogConfig.PathType.CustomPath, oLogPath) ''' Initializes a new instance of the <see cref="DigitalDataController"/> class.
_logger = _logConfig.GetLogger() ''' </summary>
Sub New(pLogger As ILogging)
_logger = pLogger
'Dim config = New LoggingConfiguration() _logger.Write("[INIT] Die Initialisierung wurde abgeschlossen.")
'Dim fileTarget = New FileTarget() With {
' .Name = "BNSPlugin",
' .ArchiveEvery = FileArchivePeriod.Day,
' .FileName = "D:/ProgramFiles/DigitalData/SERVICES/WMWebServiceBNS/Log/${date:format=yyyy-MM-dd}-WMWebServiceBNS.txt",
' .Layout = "${longdate} || ${message}"
'}
'config.AddTarget("file", fileTarget)
'Dim rule = New LoggingRule("*", LogLevel.Debug, fileTarget)
'config.LoggingRules.Add(rule)
'LogManager.Configuration = config
'_logger = LogManager.GetLogger("DigitalDataController")
Dim oConnectionString = GetConnectionString()
_logger.Info($"[DATABASE] Verbindung zu {oConnectionString}")
_database = New MSSQLServer(_logConfig, oConnectionString)
If _database.DBInitialized = False Then
_logger.Info("[DATABASE] Die Verbindung zur Datenbank konnte nicht hergestellt werden.")
Else
_logger.Info("[DATABASE] Die Verbindung zur Datenbank wurde hergestellt.")
End If
_logger.Info("[INIT] Die Initialisierung wurde abgeschlossen.")
End Sub End Sub
Private Function GetPluginPath() Private Function GetPluginPath()
@ -117,7 +72,7 @@ Namespace Controllers
Return Doc Return Doc
Else Else
_logger.Info($"[CONFIG] Konfigurations Datei {configFile} wurde NICHT gefunden!") _logger.Write($"[CONFIG] Konfigurations Datei {configFile} wurde NICHT gefunden!")
Return Nothing Return Nothing
End If End If
@ -134,17 +89,6 @@ Namespace Controllers
End If End If
End Function End Function
Private Function GetLogPath() As String
Dim oConfig = GetConfig()
If oConfig IsNot Nothing Then
Dim oLogPath As String = oConfig.DocumentElement.SelectSingleNode("/config/logPath").InnerText
Return oLogPath
Else
Return Nothing
End If
End Function
''' <summary> ''' <summary>
''' A simple example of a http-get service method implementation. ''' A simple example of a http-get service method implementation.
''' </summary> ''' </summary>
@ -153,31 +97,37 @@ Namespace Controllers
''' <remarks>This method creates a nice greeting.</remarks> ''' <remarks>This method creates a nice greeting.</remarks>
<HttpGet> <HttpGet>
Public Function BNSDownload(<FromUri> docId As Integer, <FromUri> userId As String) As HttpResponseMessage Public Function BNSDownload(<FromUri> docId As Integer, <FromUri> userId As String) As HttpResponseMessage
Dim DT As DataTable Dim DT As New DataTable("DDRESULT")
Dim Domain, Username, Password As String Dim Domain, Username, Password As String
_logger.Info($"[REQUEST] Anfrage von Benutzer-ID {userId} für Dokument-ID {docId}") _logger.Write($"[REQUEST] Anfrage von Benutzer-ID {userId} für Dokument-ID {docId}")
Try Try
DT = _database.GetDatatable($"SELECT DOMAIN, USERNAME, PW FROM TBDD_WEBSERVICE_USER_EX WHERE USERNAME_LINK = '{userId}'") Using oConnection As New SqlConnection(GetConnectionString())
Using oAdapter As New SqlDataAdapter($"SELECT DOMAIN, USERNAME, PW FROM TBDD_WEBSERVICE_USER_EX WHERE USERNAME_LINK = '{userId}'", oConnection)
oAdapter.Fill(DT)
End Using
End Using
'DT = _database.GetDatatable($"SELECT DOMAIN, USERNAME, PW FROM TBDD_WEBSERVICE_USER_EX WHERE USERNAME_LINK = '{userId}'")
Catch ex As Exception Catch ex As Exception
_logger.Info("[DATABASE] Fehler beim Zugriff auf die Datenbank ") _logger.Write("[DATABASE] Fehler beim Zugriff auf die Datenbank ")
_logger.Info(ex.Message) _logger.WriteError(ex)
Return CreateResponseMessage(Request, HttpStatusCode.InternalServerError) Return CreateResponseMessage(Request, HttpStatusCode.InternalServerError)
End Try End Try
If DT.Rows.Count = 0 Then If DT.Rows.Count = 0 Then
_logger.Info($"[DATABASE] BenutzerID {userId} wurde nicht in der Datenbank gefunden.") _logger.Write($"[DATABASE] BenutzerID {userId} wurde nicht in der Datenbank gefunden.")
Return CreateResponseMessage(Request, $"Benutzer {userId} wurde nicht gefunden", HttpStatusCode.Unauthorized) Return CreateResponseMessage(Request, $"Benutzer {userId} wurde nicht gefunden", HttpStatusCode.Unauthorized)
Else Else
Dim firstRow As DataRow = DT.Rows.Item(0) Dim oRow As DataRow = DT.Rows.Item(0)
Domain = firstRow.Item("DOMAIN") Domain = oRow.Item("DOMAIN")
Username = firstRow.Item("USERNAME") Username = oRow.Item("USERNAME")
Password = firstRow.Item("PW") Password = oRow.Item("PW")
_logger.Info($"[DATABASE] BenutzerID {userId} wurde gefunden.") _logger.Write($"[DATABASE] BenutzerID {userId} wurde gefunden.")
End If End If
Dim loggedIn As Boolean = CreateSessionForUser(Username, Password, Domain) Dim loggedIn As Boolean = CreateSessionForUser(Username, Password, Domain)
@ -194,9 +144,9 @@ Namespace Controllers
Try Try
WMDoc = _session.GetWMObjectById(WMEntity.WMEntityDocument, docId) WMDoc = _session.GetWMObjectById(WMEntity.WMEntityDocument, docId)
Catch ex As Exception Catch ex As Exception
_logger.Info("[WINDREAM/GetWMObjectById] Ein Fehler beim Zugriff auf Windream ist aufgetreten ") _logger.Write("[WINDREAM/GetWMObjectById] Ein Fehler beim Zugriff auf Windream ist aufgetreten ")
_logger.Info(ex.Message) _logger.WriteError(ex)
_logger.Info($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen") _logger.Write($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_session.Logout() _session.Logout()
Return CreateResponseMessage(Request, "Document not found", HttpStatusCode.NotFound) Return CreateResponseMessage(Request, "Document not found", HttpStatusCode.NotFound)
@ -206,15 +156,15 @@ Namespace Controllers
WMStream = WMDoc.OpenStream("BinaryObject", WMObjectStreamOpenMode.WMObjectStreamOpenModeRead) WMStream = WMDoc.OpenStream("BinaryObject", WMObjectStreamOpenMode.WMObjectStreamOpenModeRead)
fileContent = WMStream.Read(WMStream.GetSize()) fileContent = WMStream.Read(WMStream.GetSize())
Catch ex As Exception Catch ex As Exception
_logger.Info("[WINDREAM/OpenStream] Ein Fehler beim Zugriff auf Windream ist aufgetreten") _logger.Write("[WINDREAM/OpenStream] Ein Fehler beim Zugriff auf Windream ist aufgetreten")
_logger.Info(ex.Message) _logger.WriteError(ex)
_logger.Info($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen") _logger.Write($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_session.Logout() _session.Logout()
Return CreateResponseMessage(Request, HttpStatusCode.InternalServerError) Return CreateResponseMessage(Request, HttpStatusCode.InternalServerError)
End Try End Try
_logger.Info($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen") _logger.Write($"[WINDREAM/Session] Session für Benutzer {Username} wird geschlossen")
_session.Logout() _session.Logout()
' Gibt die Datei zum Download zurück ' Gibt die Datei zum Download zurück
@ -222,10 +172,11 @@ Namespace Controllers
End Function End Function
Private Function CreateFileResponseMessage(data As Byte(), filename As String) As HttpResponseMessage Private Function CreateFileResponseMessage(data As Byte(), filename As String) As HttpResponseMessage
_logger.Info($"[WINDREAM/Download] Datei {filename} wird für Download zur Verfügung gestellt") _logger.Write($"[WINDREAM/Download] Datei {filename} wird für Download zur Verfügung gestellt")
Dim Res = New HttpResponseMessage() Dim Res = New HttpResponseMessage With {
Res.StatusCode = HttpStatusCode.OK .StatusCode = HttpStatusCode.OK,
Res.Content = New ByteArrayContent(data) .Content = New ByteArrayContent(data)
}
Res.Content.Headers.ContentType = New MediaTypeHeaderValue("application/octet-stream") Res.Content.Headers.ContentType = New MediaTypeHeaderValue("application/octet-stream")
Res.Content.Headers.ContentDisposition = New ContentDispositionHeaderValue("attachment") With { Res.Content.Headers.ContentDisposition = New ContentDispositionHeaderValue("attachment") With {
.FileName = filename .FileName = filename
@ -244,66 +195,68 @@ Namespace Controllers
'' Get the current Windream Server '' Get the current Windream Server
DMSServer = WMServerBrowser.GetCurrentServer() DMSServer = WMServerBrowser.GetCurrentServer()
Catch ex As Exception Catch ex As Exception
_logger.Info($"[WINDREAM/ServerBrowser] DMS Server konnte nicht ausgelesen werden.") _logger.Write($"[WINDREAM/ServerBrowser] DMS Server konnte nicht ausgelesen werden.")
_logger.Info(ex.Message) _logger.WriteError(ex)
Return False Return False
End Try End Try
Try Try
' Create a User Object for Session ' Create a User Object for Session
User = New WMOTOOLLib.WMUserIdentity() User = New WMOTOOLLib.WMUserIdentity With {
User.aDomain = domain .aDomain = domain,
User.aPassword = password .aPassword = password,
User.aUserName = username .aUserName = username,
User.aServerName = DMSServer .aServerName = DMSServer
}
Catch ex As Exception Catch ex As Exception
_logger.Info($"[WINDREAM/User] User Objekt konnte nicht erstellt werden.") _logger.Write($"[WINDREAM/User] User Objekt konnte nicht erstellt werden.")
_logger.Info(ex.Message) _logger.WriteError(ex)
Return False Return False
End Try End Try
_logger.Info("[WINDREAM/Session] Session wird aufgebaut") _logger.Write("[WINDREAM/Session] Session wird aufgebaut")
_logger.Info($"[WINDREAM/Session] Username: {username}") _logger.Write($"[WINDREAM/Session] Username: {username}")
_logger.Info($"[WINDREAM/Session] Passwort: {password}") _logger.Write($"[WINDREAM/Session] Passwort: {password}")
_logger.Info($"[WINDREAM/Session] Domäne: {domain}") _logger.Write($"[WINDREAM/Session] Domäne: {domain}")
_logger.Info($"[WINDREAM/Session] Windream Server: {DMSServer}") _logger.Write($"[WINDREAM/Session] Windream Server: {DMSServer}")
Try Try
' Create Connect Object for Session ' Create Connect Object for Session
Connect = New WMConnect() Connect = New WMConnect With {
Connect.ModuleId = 9 .ModuleId = 9
}
Catch ex As Exception Catch ex As Exception
_logger.Info($"[WINDREAM/Connect] Connect Objekt konnte nicht erstellt werden.") _logger.Write($"[WINDREAM/Connect] Connect Objekt konnte nicht erstellt werden.")
_logger.Info(ex.Message) _logger.WriteError(ex)
Return False Return False
End Try End Try
Try Try
Session = Connect.Login(User) Session = Connect.Login(User)
_logger.Info($"[WINDREAM/Session] Session wurde aufgebaut") _logger.Write($"[WINDREAM/Session] Session wurde aufgebaut")
If Session.aLoggedin Then If Session.aLoggedin Then
_session = Session _session = Session
_logger.Info($"[WINDREAM/Session] Benutzer {username} ist eingeloggt") _logger.Write($"[WINDREAM/Session] Benutzer {username} ist eingeloggt")
Return True Return True
Else Else
_logger.Info($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!") _logger.Write($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!")
Return False Return False
End If End If
Catch ex As Exception Catch ex As Exception
_logger.Info($"[WINDREAM/Session] Fehler bei Login von Benutzer {username}!") _logger.Write($"[WINDREAM/Session] Fehler bei Login von Benutzer {username}!")
_logger.Info(ex.Message) _logger.WriteError(ex)
If Not IsNothing(Session) AndAlso Session.aLoggedin Then If Not IsNothing(Session) AndAlso Session.aLoggedin Then
_session = Session _session = Session
_logger.Info($"[WINDREAM/Session] Benutzer {username} ist eingeloggt") _logger.Write($"[WINDREAM/Session] Benutzer {username} ist eingeloggt")
Return True Return True
Else Else
_logger.Info($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!") _logger.Write($"[WINDREAM/Session] Fehler beim Aufbau der Session. Benutzer {username} ist nicht eingeloggt!")
_logger.Info(ex.Message) _logger.WriteError(ex)
Return False Return False
End If End If
End Try End Try

View File

@ -0,0 +1,3 @@
Friend Interface IUselessModel
Property Message As String
End Interface

View File

@ -1,10 +1,10 @@
Imports Microsoft.Practices.Unity Imports Microsoft.practices.unity
Imports Windream.WebService.PlugIns Imports Windream.WebService.PlugIns
Public Class ServiceRegistrator Public Class ServiceRegistrator
Implements IServiceRegistrator Implements IServiceRegistrator
Public Sub RegisterServices(container As IUnityContainer) Implements IServiceRegistrator.RegisterServices Public Sub RegisterServices(container As IUnityContainer) Implements IServiceRegistrator.RegisterServices
' container.RegisterType(Of TInterface, TImpl)() container.RegisterType(Of IUselessModel, UselessModel)()
End Sub End Sub
End Class End Class

View File

@ -0,0 +1,5 @@
Public Class UselessModel
Implements IUselessModel
Public Property Message As String Implements IUselessModel.Message
End Class