From 3eb6314ba8ca4fbf2097dd3a600026bfff292a41 Mon Sep 17 00:00:00 2001 From: Developer01 Date: Tue, 13 Oct 2026 12:06:50 +0200 Subject: [PATCH] Verbesserungen: Thread-Sicherheit, Logging, WCF-Updates MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Änderungen umfassen: - Einführung von `ReaderWriterLockSlim` für Thread-Sicherheit. - Optimierung von `IsOnline` mit atomaren Operationen. - Verbesserte Reconnect-Logik und Fehlerbehandlung. - Neue Methoden für Datenbankoperationen (`GetDatatableByName` etc.). - Gemeinsame `ChannelFactory` zur Ressourcenschonung. - Logging-Verbesserungen mit präziseren Meldungen und Symbolen. - Aktualisierte WCF-Bindings für höhere Verbindungszahlen und kürzere Timeouts. - Aktualisierte Service-Referenzen mit asynchronen Methoden. - Bereinigung von veralteten Methoden und Eigenschaften. - Assembly-Version auf `2.8.0.0` aktualisiert. --- EDMIAPI/Client.vb | 331 +- EDMIAPI/Client/Channel.vb | 127 +- .../EDMIServiceReference/Reference.svcmap | 2 +- .../EDMIServiceReference/Reference.vb | 939 ++--- .../configuration.svcinfo | 2 +- .../configuration91.svcinfo | 2 +- EDMIAPI/DatabaseWithFallback.vb | 95 +- EDMIAPI/My Project/AssemblyInfo.vb | 4 +- EDMIAPI/Reference.vb | 3401 +++++++++++++++++ 9 files changed, 4244 insertions(+), 659 deletions(-) create mode 100644 EDMIAPI/Reference.vb diff --git a/EDMIAPI/Client.vb b/EDMIAPI/Client.vb index f16d2664..cccbdfc0 100644 --- a/EDMIAPI/Client.vb +++ b/EDMIAPI/Client.vb @@ -22,8 +22,45 @@ Public Class Client ' Runtime Variables Private _ServerAddress As ServerAddressStruct Private _ClientConfig As GlobalStateClientConfiguration + + Private ReadOnly _CachedTablesLock As New ReaderWriterLockSlim() Private _CachedTables As New List(Of String) - Private _IsOnline As Boolean + + Public ReadOnly Property CachedTables As List(Of String) + Get + _CachedTablesLock.EnterReadLock() + Try + Return _CachedTables.ToList() ' Snapshot zurückgeben + Finally + _CachedTablesLock.ExitReadLock() + End Try + End Get + End Property + + ' Hilfsmethode – intern für alle Schreibzugriffe verwenden + Private Sub SetCachedTables(pTables As IEnumerable(Of String)) + _CachedTablesLock.EnterWriteLock() + Try + _CachedTables = pTables.ToList() + Finally + _CachedTablesLock.ExitWriteLock() + End Try + End Sub + ' Ersetzt: Private _IsOnline As Boolean + Private _IsOnline As Integer = 0 ' 0 = offline, 1 = online (Interlocked-kompatibel) + Public ReadOnly Property IsOnline As Boolean + Get + Return Interlocked.CompareExchange(_IsOnline, 0, 0) = 1 + End Get + End Property + ' Setter-Hilfsmethoden für alle Schreibstellen: + Private Sub SetOnline() + Interlocked.Exchange(_IsOnline, 1) + End Sub + + Private Sub SetOffline() + Interlocked.Exchange(_IsOnline, 0) + End Sub ' Verhindert parallele Reconnect-Versuche (0 = frei, 1 = läuft) Private _IsReconnecting As Integer = 0 Private _Channel As IEDMIServiceChannel @@ -56,14 +93,14 @@ Public Class Client Protected Overridable Sub Dispose(disposing As Boolean) If _Disposed Then Return If disposing Then - _IsOnline = False ' ← Reconnect-Guard deaktivieren + SetOffline() UpdateTimer.Stop() UpdateTimer.Dispose() ' Auf laufenden Reconnect warten Dim oTimeout = DateTime.Now.AddSeconds(5) While _IsReconnecting = 1 AndAlso DateTime.Now < oTimeout - Task.Delay(100).Wait() + Thread.Sleep(100) End While If _Channel IsNot Nothing Then @@ -71,6 +108,8 @@ Public Class Client _Channel = Nothing End If + _CachedTablesLock.Dispose() ' ← NEU: Lock freigeben + Dim oRemoved As ClientStatus = Nothing _ActiveClients.TryRemove(_ClientId, oRemoved) Logger.Debug("Client [{0}] unregistered. Total active clients: [{1}]", _ClientName, _ActiveClients.Count) @@ -79,11 +118,6 @@ Public Class Client End Sub ' Public Variables - Public ReadOnly Property CachedTables - Get - Return _CachedTables - End Get - End Property Public ReadOnly Property ClientConfig As GlobalStateClientConfiguration Get @@ -94,13 +128,6 @@ Public Class Client Return _ClientConfig End Get End Property - - Public ReadOnly Property IsOnline As Boolean - Get - Return _IsOnline - End Get - End Property - Public ReadOnly Property ServerAddress As String Get Return $"{_ServerAddress.Host}:{_ServerAddress.Port}" @@ -197,14 +224,14 @@ Public Class Client ' CachedTables sofort befüllen – nicht auf den ersten Timer-Tick warten Try Dim oTables As String() = _Channel.GetCachedTables() - _CachedTables = oTables.Select(Function(t) t.ToUpper).ToList() - Logger.Debug("✔ CachedTables loaded on connect: [{0}]", _CachedTables.Count) + SetCachedTables(oTables.Select(Function(t) t.ToUpper())) + Logger.Debug("✔ CachedTables loaded on connect: [{0}]", CachedTables.Count) Catch ex As Exception Logger.Warn("⚠ CachedTables could not be loaded on connect: {0}", ex.Message) - _CachedTables = New List(Of String) + SetCachedTables(Enumerable.Empty(Of String)()) End Try - _IsOnline = True ' ← vor GetStatus() + SetOnline() UpdateTimer.Start() ' In Registry eintragen – jetzt mit korrektem IsOnline=True @@ -213,7 +240,7 @@ Public Class Client Return True Catch ex As Exception - _IsOnline = False + SetOffline() Logger.Error(ex) Return False End Try @@ -243,7 +270,7 @@ Public Class Client _Channel = ChannelManager.GetChannel() _Channel.Open() - _IsOnline = True + SetOnline() If _ActiveClients.ContainsKey(_ClientId) Then _ActiveClients(_ClientId) = GetStatus() @@ -253,7 +280,7 @@ Public Class Client Return Catch ex As Exception Logger.Warn("⚠ Reconnect failed after [{0}]s: {1}", oDelay, ex.Message) - _IsOnline = False + SetOffline() End Try Next @@ -266,53 +293,51 @@ Public Class Client Private Async Sub UpdateTimer_Elapsed(sender As Object, e As Timers.ElapsedEventArgs) Handles UpdateTimer.Elapsed Try - If _Channel Is Nothing OrElse _Channel.State <> CommunicationState.Opened Then - Logger.Warn("⚠ UpdateTimer skipped: Channel not in Opened state [{0}]", If(_Channel IsNot Nothing, _Channel.State.ToString(), "null")) - _IsOnline = False + ' ← Snapshot VOR dem Await – schützt gegen _Channel = Nothing nach Resume + Dim oChannel = _Channel + If oChannel Is Nothing OrElse oChannel.State <> CommunicationState.Opened Then + Logger.Warn("⚠ UpdateTimer skipped: Channel not in Opened state [{0}]", + If(oChannel IsNot Nothing, oChannel.State.ToString(), "null")) + SetOffline() Reconnect(sender, e) Return End If - If Not _IsOnline Then + If Not IsOnline Then Logger.Debug("UpdateTimer skipped: Client is offline.") Return End If - Dim oTables As String() = Await _Channel.GetCachedTablesAsync() - ' ◄ NullReferenceException-Schutz: Service kann Nothing zurückgeben + Dim oTables As String() = Await oChannel.GetCachedTablesAsync() ' ← oChannel statt _Channel + If oTables Is Nothing Then Logger.Warn("⚠ UpdateTimer: GetCachedTablesAsync returned Nothing.") - _CachedTables = New List(Of String) + SetCachedTables(Enumerable.Empty(Of String)()) Return End If - _CachedTables = oTables. - Select(Function(table) table.ToUpper). - ToList() + SetCachedTables(oTables.Select(Function(table) table.ToUpper())) + + ' ← oChannel.State statt _Channel.State Logger.Info("✔ Channel state: [{0}] | Active connections: [{1}] | CachedTables: [{2}]", - _Channel.State, - Channel.ActiveConnections, - _CachedTables.Count) + oChannel.State, Channel.ActiveConnections, CachedTables.Count) If _ActiveClients.ContainsKey(_ClientId) Then _ActiveClients(_ClientId) = GetStatus() End If Catch ex As TimeoutException - ' Stale TCP connection (z.B. Firewall/Citrix Idle-Timeout) - Logger.Warn("⚠ UpdateTimer: TCP connection lost (idle timeout / firewall). Triggering reconnect...") - _IsOnline = False + Logger.Warn("⚠ UpdateTimer: TCP connection lost. Triggering reconnect...") + SetOffline() Reconnect() - Catch ex As CommunicationException Logger.Warn("⚠ UpdateTimer: Channel faulted. Triggering reconnect...") - _IsOnline = False + SetOffline() Reconnect() - Catch ex As Exception Logger.Warn("⚠ Update of CachedTable was not successful!") Logger.Error(ex) - _CachedTables = New List(Of String) + SetCachedTables(Enumerable.Empty(Of String)()) End Try End Sub @@ -626,6 +651,59 @@ Public Class Client End Function #Region "GetDatatable" + Public Function GetDatatableByName(DatatableName As String, Optional FilterExpression As String = "", Optional SortByColumn As String = "") As TableResult + EnsureAvailable() + Try + Return _Channel.ReturnDatatableFromCache(DatatableName, FilterExpression, SortByColumn) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableByName)) + Catch ex As EndpointNotFoundException + HandleCommunicationError(ex, NameOf(GetDatatableByName)) + Catch ex As CommunicationException + HandleCommunicationError(ex, NameOf(GetDatatableByName)) + Catch ex As Exception + Logger.Error(ex) + Throw + End Try + End Function + + Public Function GetScalarValueFromIDB(pSQL As String) As GetScalarValueResponse + EnsureAvailable() + Try + Return _Channel.ReturnScalarValue(New GetScalarValueRequest() With { + .SqlCommand = pSQL, + .NamedDatabase = DatabaseName.IDB + }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetScalarValueFromIDB)) + Catch ex As EndpointNotFoundException + HandleCommunicationError(ex, NameOf(GetScalarValueFromIDB)) + Catch ex As CommunicationException + HandleCommunicationError(ex, NameOf(GetScalarValueFromIDB)) + Catch ex As Exception + Logger.Error(ex) + Throw + End Try + End Function + + Public Function ExecuteNonQueryFromIDB(pSQL As String) As ExecuteNonQueryResponse + EnsureAvailable() + Try + Return _Channel.ExecuteNonQuery(New ExecuteNonQueryRequest() With { + .SqlCommand = pSQL, + .NamedDatabase = DatabaseName.IDB + }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDB)) + Catch ex As EndpointNotFoundException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDB)) + Catch ex As CommunicationException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDB)) + Catch ex As Exception + Logger.Error(ex) + Throw + End Try + End Function Public Function GetDatatableFromIDB(pSQL As String) As GetDatatableResponse EnsureAvailable() Try @@ -633,6 +711,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.IDB }) + Catch ex As TimeoutException ' ← NEU + HandleCommunicationError(ex, NameOf(GetDatatableFromIDB)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetDatatableFromIDB)) Catch ex As CommunicationException @@ -643,6 +723,7 @@ Public Class Client End Try End Function + ' ── GetDatatable ────────────────────────────────────────── Public Function GetDatatableFromECM(pSQL As String) As GetDatatableResponse EnsureAvailable() Try @@ -650,6 +731,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.ECM }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableFromECM)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetDatatableFromECM)) Catch ex As CommunicationException @@ -668,6 +751,8 @@ Public Class Client .NamedDatabase = DatabaseName.None, .ConnectionId = pConnectionId }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableFromConnection)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetDatatableFromConnection)) Catch ex As CommunicationException @@ -685,6 +770,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.IDB }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableFromIDBAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetDatatableFromIDBAsync)) Catch ex As CommunicationException @@ -703,6 +790,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.ECM }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableFromECMAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetDatatableFromECMAsync)) Catch ex As CommunicationException @@ -721,6 +810,8 @@ Public Class Client .NamedDatabase = DatabaseName.None, .ConnectionId = pConnectionId }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableFromConnectionAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetDatatableFromConnectionAsync)) Catch ex As CommunicationException @@ -730,26 +821,8 @@ Public Class Client Throw End Try End Function -#End Region - -#Region "GetScalarValue" - Public Function GetScalarValueFromIDB(pSQL As String) As GetScalarValueResponse - EnsureAvailable() - Try - Return _Channel.ReturnScalarValue(New GetScalarValueRequest() With { - .SqlCommand = pSQL, - .NamedDatabase = DatabaseName.IDB - }) - Catch ex As EndpointNotFoundException - HandleCommunicationError(ex, NameOf(GetScalarValueFromIDB)) - Catch ex As CommunicationException - HandleCommunicationError(ex, NameOf(GetScalarValueFromIDB)) - Catch ex As Exception - Logger.Error(ex) - Throw - End Try - End Function + ' ── GetScalarValue ───────────────────────────────────────── Public Function GetScalarValueFromECM(pSQL As String) As GetScalarValueResponse EnsureAvailable() Try @@ -757,6 +830,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.ECM }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetScalarValueFromECM)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetScalarValueFromECM)) Catch ex As CommunicationException @@ -775,6 +850,8 @@ Public Class Client .NamedDatabase = DatabaseName.None, .ConnectionId = pConnectionId }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetScalarValueFromConnection)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetScalarValueFromConnection)) Catch ex As CommunicationException @@ -792,6 +869,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.IDB }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetScalarValueFromIDBAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetScalarValueFromIDBAsync)) Catch ex As CommunicationException @@ -809,6 +888,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.ECM }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetScalarValueFromECMAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetScalarValueFromECMAsync)) Catch ex As CommunicationException @@ -827,6 +908,8 @@ Public Class Client .NamedDatabase = DatabaseName.None, .ConnectionId = pConnectionId }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetScalarValueFromConnectionAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(GetScalarValueFromConnectionAsync)) Catch ex As CommunicationException @@ -836,26 +919,8 @@ Public Class Client Throw End Try End Function -#End Region - -#Region "ExecuteNonQuery" - Public Function ExecuteNonQueryFromIDB(pSQL As String) As ExecuteNonQueryResponse - EnsureAvailable() - Try - Return _Channel.ExecuteNonQuery(New ExecuteNonQueryRequest() With { - .SqlCommand = pSQL, - .NamedDatabase = DatabaseName.IDB - }) - Catch ex As EndpointNotFoundException - HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDB)) - Catch ex As CommunicationException - HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDB)) - Catch ex As Exception - Logger.Error(ex) - Throw - End Try - End Function + ' ── ExecuteNonQuery ──────────────────────────────────────── Public Function ExecuteNonQueryFromECM(pSQL As String) As ExecuteNonQueryResponse EnsureAvailable() Try @@ -863,6 +928,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.ECM }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromECM)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromECM)) Catch ex As CommunicationException @@ -881,6 +948,8 @@ Public Class Client .NamedDatabase = DatabaseName.None, .ConnectionId = pConnectionId }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromConnection)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromConnection)) Catch ex As CommunicationException @@ -898,6 +967,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.IDB }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDBAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromIDBAsync)) Catch ex As CommunicationException @@ -915,6 +986,8 @@ Public Class Client .SqlCommand = pSQL, .NamedDatabase = DatabaseName.ECM }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromECMAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromECMAsync)) Catch ex As CommunicationException @@ -933,6 +1006,8 @@ Public Class Client .NamedDatabase = DatabaseName.None, .ConnectionId = pConnectionId }) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromConnectionAsync)) Catch ex As EndpointNotFoundException HandleCommunicationError(ex, NameOf(ExecuteNonQueryFromConnectionAsync)) Catch ex As CommunicationException @@ -942,45 +1017,26 @@ Public Class Client Throw End Try End Function + + ' ── Sonstige ─────────────────────────────────────────────── + Public Async Function GetDatatableByNameAsync(DatatableName As String, Optional FilterExpression As String = "", Optional SortByColumn As String = "") As Task(Of TableResult) + EnsureAvailable() + Try + Return Await _Channel.ReturnDatatableFromCacheAsync(DatatableName, FilterExpression, SortByColumn) + Catch ex As TimeoutException + HandleCommunicationError(ex, NameOf(GetDatatableByNameAsync)) + Catch ex As EndpointNotFoundException + HandleCommunicationError(ex, NameOf(GetDatatableByNameAsync)) + Catch ex As CommunicationException + HandleCommunicationError(ex, NameOf(GetDatatableByNameAsync)) + Catch ex As Exception + Logger.Error(ex) + Throw + End Try + End Function #End Region - Public Function GetDatatableByName(DatatableName As String, Optional FilterExpression As String = "", Optional SortByColumn As String = "") As TableResult - EnsureAvailable() - Try - Return _Channel.ReturnDatatableFromCache(DatatableName, FilterExpression, SortByColumn) - Catch ex As EndpointNotFoundException - HandleCommunicationError(ex, NameOf(GetDatatableByName)) - Catch ex As CommunicationException - HandleCommunicationError(ex, NameOf(GetDatatableByName)) - Catch ex As Exception - Logger.Error(ex) - Throw - End Try - End Function - - Public Async Function GetDatatableByNameAsync(DatatableName As String, Optional FilterExpression As String = "", Optional SortByColumn As String = "") As Task(Of TableResult) - EnsureAvailable() - Try - Return Await _Channel.ReturnDatatableFromCacheAsync(DatatableName, FilterExpression, SortByColumn) - Catch ex As EndpointNotFoundException - HandleCommunicationError(ex, NameOf(GetDatatableByNameAsync)) - Catch ex As CommunicationException - HandleCommunicationError(ex, NameOf(GetDatatableByNameAsync)) - Catch ex As Exception - Logger.Error(ex) - Throw - End Try - End Function - - - - ''' - ''' Return infos about a file object - ''' - ''' - ''' - ''' Public Function GetDocumentInfo(UserId As Long, ObjectId As Long) As DocumentInfo Try Dim oResponse As DocumentInfoResponse = _Channel.GetFileInfoByObjectId(New DocumentInfoRequest With { @@ -1056,27 +1112,25 @@ Public Class Client Throw New InvalidOperationException("Channel is not initialized. Call Connect() first.") End If - If Not _IsOnline Then - ' Kurze Grace-Period abwarten, damit Reconnect() seinen _IsReconnecting-Flag setzen kann - Dim oGraceLimit = DateTime.Now.AddMilliseconds(600) - While DateTime.Now < oGraceLimit AndAlso _IsReconnecting = 0 AndAlso Not _IsOnline - Task.Delay(100).Wait() - End While + If Not IsOnline Then + ' Wenn Reconnect aktiv läuft: kurze Grace-Period (max 1s) statt 10s + If _IsReconnecting = 1 Then + Dim oGraceLimit = DateTime.Now.AddMilliseconds(1000) + While DateTime.Now < oGraceLimit AndAlso Not IsOnline + Thread.Sleep(100) + End While + End If - ' Jetzt auf aktiven Reconnect warten - Dim oWaitLimit = DateTime.Now.AddSeconds(10) - While Not _IsOnline AndAlso DateTime.Now < oWaitLimit AndAlso _IsReconnecting = 1 - Task.Delay(500).Wait() - Logger.Debug("EnsureAvailable: Waiting for reconnect... Channel=[{0}]", _Channel.State.ToString()) - End While - - If Not _IsOnline Then - Throw New InvalidOperationException("Client is offline.") + ' Danach sofort werfen – WCF-Timeout nicht weiter aufbrauchen + If Not IsOnline Then + Throw New InvalidOperationException( + $"Client is offline. Reconnect in progress=[{_IsReconnecting = 1}].") End If End If If _Channel.State <> CommunicationState.Opened Then - Throw New InvalidOperationException($"Channel is not available. State=[{_Channel.State}]") + Throw New InvalidOperationException( + $"Channel is not available. State=[{_Channel.State}]") End If End Sub ''' @@ -1084,6 +1138,8 @@ Public Class Client ''' Private Sub HandleCommunicationError(ex As Exception, callerName As String) Select Case True + Case TypeOf ex Is TimeoutException + Logger.Warn("⚠ TimeoutException in [{0}]. Channel may be stale. Triggering reconnect...", callerName) Case TypeOf ex Is EndpointNotFoundException Logger.Warn("⚠ Service not reachable (EndpointNotFoundException in [{0}]). Triggering reconnect...", callerName) Case TypeOf ex Is CommunicationException @@ -1093,7 +1149,7 @@ Public Class Client Logger.Error(ex) End Select - _IsOnline = False + SetOffline() Reconnect() Throw ex End Sub @@ -1190,15 +1246,16 @@ Public Class Client ''' Returns a detailed status snapshot of the current client state ''' Public Function GetStatus() As ClientStatus + Dim oTables = CachedTables ' ← Property nutzen: enthält Read-Lock + Snapshot Return New ClientStatus() With { - .IsOnline = _IsOnline, - .ClientId = _ClientId, ' ← Neu + .IsOnline = IsOnline, ' ← Property statt Feld + .ClientId = _ClientId, .ClientName = _ClientName, .ServerAddress = Me.ServerAddress, .ChannelState = If(_Channel IsNot Nothing, _Channel.State.ToString(), "null"), .ActiveConnections = Channel.ActiveConnections, - .CachedTableCount = _CachedTables.Count, - .CachedTables = _CachedTables.ToList(), + .CachedTableCount = oTables.Count, ' ← aus Snapshot + .CachedTables = oTables, ' ← aus Snapshot .HasClientConfig = _ClientConfig IsNot Nothing, .IsDisposed = _Disposed, .TimerEnabled = UpdateTimer.Enabled, diff --git a/EDMIAPI/Client/Channel.vb b/EDMIAPI/Client/Channel.vb index 53f75c26..8d7eceb3 100644 --- a/EDMIAPI/Client/Channel.vb +++ b/EDMIAPI/Client/Channel.vb @@ -8,10 +8,14 @@ Imports DigitalData.Modules.Logging Public Class Channel Inherits BaseClass + Private Shared ReadOnly _FactoryLock As New Object() + Private Shared _SharedFactory As ChannelFactory(Of IEDMIServiceChannel) = Nothing + Private Shared _SharedFactoryEndpoint As String = String.Empty + Private ReadOnly ChannelFactory As ChannelFactory(Of IEDMIServiceChannel) Public Event Reconnect As EventHandler - ' Verbindungszähler + Private Shared _ActiveConnections As Integer = 0 Public Shared ReadOnly Property ActiveConnections As Integer Get @@ -20,40 +24,91 @@ Public Class Channel End Property Public Shared Function GetBinding(Optional AuthenticationMode As TcpClientCredentialType = TcpClientCredentialType.Windows) As NetTcpBinding + Dim oMaxConnections = Math.Max(500, Environment.ProcessorCount * 50) + Return New NetTcpBinding() With { - .MaxReceivedMessageSize = Constants.ChannelSettings.MAX_RECEIVED_MESSAGE_SIZE, - .MaxBufferSize = Constants.ChannelSettings.MAX_BUFFER_SIZE, - .MaxBufferPoolSize = Constants.ChannelSettings.MAX_BUFFER_POOL_SIZE, - .ListenBacklog = Constants.ChannelSettings.MAX_CONNECTIONS, - .MaxConnections = Constants.ChannelSettings.MAX_CONNECTIONS, - .TransferMode = TransferMode.Streamed, - .SendTimeout = TimeSpan.FromSeconds(30), ' ← War: 5min → Schnellere Fehlererkennung - .ReceiveTimeout = TimeSpan.FromMinutes(10), ' Keepalive < Firewall-Timeout (3600s) ✓ - .OpenTimeout = TimeSpan.FromSeconds(30), ' ← Neu: Verbindungsaufbau begrenzen - .CloseTimeout = TimeSpan.FromSeconds(30), - .Security = New NetTcpSecurity() With { - .Mode = SecurityMode.Transport, - .Transport = New TcpTransportSecurity() With { - .ClientCredentialType = AuthenticationMode + .MaxReceivedMessageSize = Constants.ChannelSettings.MAX_RECEIVED_MESSAGE_SIZE, + .MaxBufferSize = Constants.ChannelSettings.MAX_BUFFER_SIZE, + .MaxBufferPoolSize = Constants.ChannelSettings.MAX_BUFFER_POOL_SIZE, + .ListenBacklog = oMaxConnections, + .MaxConnections = oMaxConnections, + .TransferMode = TransferMode.Streamed, + .SendTimeout = TimeSpan.FromSeconds(60), + .ReceiveTimeout = TimeSpan.FromMinutes(10), + .OpenTimeout = TimeSpan.FromSeconds(60), + .CloseTimeout = TimeSpan.FromSeconds(30), + .Security = New NetTcpSecurity() With { + .Mode = SecurityMode.Transport, + .Transport = New TcpTransportSecurity() With { + .ClientCredentialType = AuthenticationMode + } + }, + .ReaderQuotas = New XmlDictionaryReaderQuotas() With { + .MaxArrayLength = Constants.ChannelSettings.MAX_ARRAY_LENGTH, + .MaxStringContentLength = Constants.ChannelSettings.MAX_STRING_CONTENT_LENGTH } - }, - .ReaderQuotas = New XmlDictionaryReaderQuotas() With { - .MaxArrayLength = Constants.ChannelSettings.MAX_ARRAY_LENGTH, - .MaxStringContentLength = Constants.ChannelSettings.MAX_STRING_CONTENT_LENGTH } - } End Function Public Sub New(pLogConfig As LogConfig, pServerAddress As ServerAddressStruct) MyBase.New(pLogConfig) - ChannelFactory = GetChannelFactory(pServerAddress) + ChannelFactory = GetOrCreateSharedFactory(pLogConfig, pServerAddress) End Sub + + ''' + ''' Gibt eine gemeinsame ChannelFactory zurück. + ''' Ein Connection-Pool für alle Client-Instanzen desselben Endpoints. + ''' + Private Shared Function GetOrCreateSharedFactory(pLogConfig As LogConfig, pServerAddress As ServerAddressStruct) As ChannelFactory(Of IEDMIServiceChannel) + Dim oEndpoint = $"net.tcp://{pServerAddress.Host}:{pServerAddress.Port}/DigitalData/Services/Main" + + ' ← Volatile.Read: garantiert aktuellen Wert auch ohne Lock + Dim oCurrentFactory = Volatile.Read(_SharedFactory) + If oCurrentFactory IsNot Nothing AndAlso + _SharedFactoryEndpoint = oEndpoint AndAlso + (oCurrentFactory.State = CommunicationState.Opened OrElse + oCurrentFactory.State = CommunicationState.Created) Then + Return oCurrentFactory + End If + + SyncLock _FactoryLock + ' Double-check nach Lock + If _SharedFactory IsNot Nothing AndAlso + _SharedFactoryEndpoint = oEndpoint AndAlso + (_SharedFactory.State = CommunicationState.Opened OrElse + _SharedFactory.State = CommunicationState.Created) Then + Return _SharedFactory + End If + + If _SharedFactory IsNot Nothing Then + If _SharedFactory.State = CommunicationState.Faulted OrElse + _SharedFactory.State = CommunicationState.Closing Then + Try + _SharedFactory.Abort() + Catch + End Try + End If + _SharedFactory = Nothing + End If + + Dim oLogger = pLogConfig.GetLogger() + Dim oBinding = GetBinding() + Dim oAddress = New EndpointAddress(oEndpoint) + + oLogger.Debug("Creating shared ChannelFactory | Endpoint=[{0}] | MaxConnections=[{1}] | SendTimeout=[{2}] | OpenTimeout=[{3}]", + oEndpoint, oBinding.MaxConnections, oBinding.SendTimeout, oBinding.OpenTimeout) + + _SharedFactory = New ChannelFactory(Of IEDMIServiceChannel)(oBinding, oAddress) + _SharedFactoryEndpoint = oEndpoint + Return _SharedFactory + End SyncLock + End Function + ''' ''' Closes a channel gracefully, falls back to Abort on error ''' Public Shared Sub CloseChannel(pChannel As IEDMIServiceChannel) If pChannel Is Nothing Then Return - Try If pChannel.State = CommunicationState.Opened Then pChannel.Close() @@ -61,31 +116,27 @@ Public Class Channel pChannel.State = CommunicationState.Closing Then pChannel.Abort() End If - ' CommunicationState.Created / Closed → nichts tun, Zähler nicht betroffen Catch ex As Exception Try pChannel.Abort() Catch - ' Ignore End Try End Try End Sub + ''' ''' Creates a channel and adds a Faulted-Handler ''' - ''' A channel object Public Function GetChannel() As IEDMIServiceChannel Try - Logger.Debug("Creating channel.") + Logger.Debug("Creating channel from shared factory.") Dim oChannel = ChannelFactory.CreateChannel() - ' Verbindung zählen beim Öffnen AddHandler oChannel.Opened, Sub() Dim oCount = Interlocked.Increment(_ActiveConnections) Logger.Debug("Channel opened. Active connections: [{0}]", oCount) End Sub - ' Verbindung abziehen beim Schließen oder Fehler AddHandler oChannel.Closed, Sub() Dim oCount = Interlocked.Decrement(_ActiveConnections) Logger.Debug("Channel closed. Active connections: [{0}]", oCount) @@ -93,7 +144,7 @@ Public Class Channel AddHandler oChannel.Faulted, Sub() Dim oCount = Interlocked.Decrement(_ActiveConnections) - Logger.Warn("Channel faulted. Active connections: [{0}]", oCount) + Logger.Warn("⚠ Channel faulted. Active connections: [{0}]", oCount) RaiseEvent Reconnect(Me, Nothing) End Sub @@ -104,20 +155,4 @@ Public Class Channel Throw End Try End Function - - Private Function GetChannelFactory(pServerAddress As ServerAddressStruct) As ChannelFactory(Of IEDMIServiceChannel) - Dim oBinding = GetBinding() - Dim oAddress = New EndpointAddress($"net.tcp://{pServerAddress.Host}:{pServerAddress.Port}/DigitalData/Services/Main") - Logger.Debug("Creating ChannelFactory with Binding: SendTimeout=[{0}], ReceiveTimeout=[{1}], MaxConnections=[{2}], MaxBufferSize=[{3}], TransferMode=[{4}]", - oBinding.SendTimeout, - oBinding.ReceiveTimeout, - oBinding.MaxConnections, - oBinding.MaxBufferSize, - oBinding.TransferMode) - Dim oFactory = New ChannelFactory(Of IEDMIServiceChannel)(oBinding, oAddress) - Return oFactory - End Function - -End Class - - +End Class \ No newline at end of file diff --git a/EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap b/EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap index bc5505c0..1ad6b3b6 100644 --- a/EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap +++ b/EDMIAPI/Connected Services/EDMIServiceReference/Reference.svcmap @@ -1,5 +1,5 @@ - + false true diff --git a/EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb b/EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb index 2aaa8bbb..0e2c9cb4 100644 --- a/EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb +++ b/EDMIAPI/Connected Services/EDMIServiceReference/Reference.vb @@ -15,94 +15,94 @@ Imports System Imports System.Runtime.Serialization Namespace EDMIServiceReference - - + + _ Partial Public Class BaseResponse Inherits Object Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged - - + + _ Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject - - + + _ Private ErrorDetailsField As String - - + + _ Private ErrorMessageField As String - - + + _ Private OKField As Boolean - - + + _ Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData Get Return Me.extensionDataField End Get Set - Me.extensionDataField = Value + Me.extensionDataField = value End Set End Property - - + + _ Public Property ErrorDetails() As String Get Return Me.ErrorDetailsField End Get Set - If (Object.ReferenceEquals(Me.ErrorDetailsField, Value) <> True) Then - Me.ErrorDetailsField = Value + If (Object.ReferenceEquals(Me.ErrorDetailsField, value) <> true) Then + Me.ErrorDetailsField = value Me.RaisePropertyChanged("ErrorDetails") End If End Set End Property - - + + _ Public Property ErrorMessage() As String Get Return Me.ErrorMessageField End Get Set - If (Object.ReferenceEquals(Me.ErrorMessageField, Value) <> True) Then - Me.ErrorMessageField = Value + If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then + Me.ErrorMessageField = value Me.RaisePropertyChanged("ErrorMessage") End If End Set End Property - - + + _ Public Property OK() As Boolean Get Return Me.OKField End Get Set - If (Me.OKField.Equals(Value) <> True) Then - Me.OKField = Value + If (Me.OKField.Equals(value) <> true) Then + Me.OKField = value Me.RaisePropertyChanged("OK") End If End Set End Property - + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged - + Protected Sub RaisePropertyChanged(ByVal propertyName As String) Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent If (Not (propertyChanged) Is Nothing) Then @@ -110,492 +110,492 @@ Namespace EDMIServiceReference End If End Sub End Class - - + + _ Partial Public Class TableResult Inherits EDMIServiceReference.BaseResponse - - + + _ Private TableField As System.Data.DataTable - - + + _ Public Property Table() As System.Data.DataTable Get Return Me.TableField End Get Set - If (Object.ReferenceEquals(Me.TableField, Value) <> True) Then - Me.TableField = Value + If (Object.ReferenceEquals(Me.TableField, value) <> true) Then + Me.TableField = value Me.RaisePropertyChanged("Table") End If End Set End Property End Class - - + + _ Partial Public Class ScalarResult Inherits EDMIServiceReference.BaseResponse - - + + _ Private ScalarField As Object - - + + _ Public Property Scalar() As Object Get Return Me.ScalarField End Get Set - If (Object.ReferenceEquals(Me.ScalarField, Value) <> True) Then - Me.ScalarField = Value + If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then + Me.ScalarField = value Me.RaisePropertyChanged("Scalar") End If End Set End Property End Class - - + + _ Partial Public Class NonQueryResult Inherits EDMIServiceReference.BaseResponse End Class - - + + _ Partial Public Class GetDatatableResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private TableField As System.Data.DataTable - - + + _ Public Property Table() As System.Data.DataTable Get Return Me.TableField End Get Set - If (Object.ReferenceEquals(Me.TableField, Value) <> True) Then - Me.TableField = Value + If (Object.ReferenceEquals(Me.TableField, value) <> true) Then + Me.TableField = value Me.RaisePropertyChanged("Table") End If End Set End Property End Class - - + + _ Partial Public Class GetScalarValueResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ScalarField As Object - - + + _ Public Property Scalar() As Object Get Return Me.ScalarField End Get Set - If (Object.ReferenceEquals(Me.ScalarField, Value) <> True) Then - Me.ScalarField = Value + If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then + Me.ScalarField = value Me.RaisePropertyChanged("Scalar") End If End Set End Property End Class - - + + _ Partial Public Class ExecuteNonQueryResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ResultField As Boolean - - + + _ Public Property Result() As Boolean Get Return Me.ResultField End Get Set - If (Me.ResultField.Equals(Value) <> True) Then - Me.ResultField = Value + If (Me.ResultField.Equals(value) <> true) Then + Me.ResultField = value Me.RaisePropertyChanged("Result") End If End Set End Property End Class - - + + _ Partial Public Class NewFileResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set End Property End Class - - + + _ Partial Public Class UpdateFileResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set End Property End Class - - + + _ Partial Public Class SetAttributeValueResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set End Property End Class - - + + _ Partial Public Class GetAttributeValueResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Private ValueField As Object - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set End Property - - + + _ Public Property Value() As Object Get Return Me.ValueField End Get Set - If (Object.ReferenceEquals(Me.ValueField, Value) <> True) Then - Me.ValueField = Value + If (Object.ReferenceEquals(Me.ValueField, value) <> true) Then + Me.ValueField = value Me.RaisePropertyChanged("Value") End If End Set End Property End Class - - + + _ Partial Public Class GetFileObjectResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private FileObjectField As EDMIServiceReference.FileObject - - + + _ Public Property FileObject() As EDMIServiceReference.FileObject Get Return Me.FileObjectField End Get Set - If (Object.ReferenceEquals(Me.FileObjectField, Value) <> True) Then - Me.FileObjectField = Value + If (Object.ReferenceEquals(Me.FileObjectField, value) <> true) Then + Me.FileObjectField = value Me.RaisePropertyChanged("FileObject") End If End Set End Property End Class - - + + _ Partial Public Class CheckInOutFileResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set End Property End Class - - + + _ Partial Public Class ImportFileResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set End Property End Class - - + + _ Partial Public Class Globix_ImportFileResponse Inherits EDMIServiceReference.BaseResponse - - + + _ Private ObjectIdField As Long - - + + _ Public Property ObjectId() As Long Get Return Me.ObjectIdField End Get Set - If (Me.ObjectIdField.Equals(Value) <> True) Then - Me.ObjectIdField = Value + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value Me.RaisePropertyChanged("ObjectId") End If End Set @@ -628,7 +628,7 @@ Namespace EDMIServiceReference End Class Partial Public Class ServiceStatusResponse Inherits Object @@ -636,18 +636,26 @@ Namespace EDMIServiceReference Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject - Private ActiveSessionCountField As Integer - Private ActiveUsersField As System.Collections.Generic.List(Of String) - Private ActiveSessionsField As System.Collections.Generic.Dictionary(Of String, String) - Private TimestampField As Date + + Private RecentUsersField As System.Collections.Generic.List(Of String) + + Private LastJobDurationMsField As Long + + Private LastJobNameField As String + + Private LastJobTimestampField As Date + + Private SlowQueryCountField As Integer + + Private CachedTablesSnapshotAgeField As Integer Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData @@ -711,6 +719,83 @@ Namespace EDMIServiceReference End Set End Property + + Public Property RecentUsers() As System.Collections.Generic.List(Of String) + Get + Return Me.RecentUsersField + End Get + Set + If (Object.ReferenceEquals(Me.RecentUsersField, Value) <> True) Then + Me.RecentUsersField = Value + Me.RaisePropertyChanged("RecentUsers") + End If + End Set + End Property + + Public Property LastJobDurationMs() As Long + Get + Return Me.LastJobDurationMsField + End Get + Set + If (Me.LastJobDurationMsField.Equals(Value) <> True) Then + Me.LastJobDurationMsField = Value + Me.RaisePropertyChanged("LastJobDurationMs") + End If + End Set + End Property + + + Public Property LastJobName() As String + Get + Return Me.LastJobNameField + End Get + Set + If (Object.ReferenceEquals(Me.LastJobNameField, Value) <> True) Then + Me.LastJobNameField = Value + Me.RaisePropertyChanged("LastJobName") + End If + End Set + End Property + + + Public Property LastJobTimestamp() As Date + Get + Return Me.LastJobTimestampField + End Get + Set + If (Me.LastJobTimestampField.Equals(Value) <> True) Then + Me.LastJobTimestampField = Value + Me.RaisePropertyChanged("LastJobTimestamp") + End If + End Set + End Property + + + Public Property SlowQueryCount() As Integer + Get + Return Me.SlowQueryCountField + End Get + Set + If (Me.SlowQueryCountField.Equals(Value) <> True) Then + Me.SlowQueryCountField = Value + Me.RaisePropertyChanged("SlowQueryCount") + End If + End Set + End Property + + + Public Property CachedTablesSnapshotAge() As Integer + Get + Return Me.CachedTablesSnapshotAgeField + End Get + Set + If (Me.CachedTablesSnapshotAgeField.Equals(Value) <> True) Then + Me.CachedTablesSnapshotAgeField = Value + Me.RaisePropertyChanged("CachedTablesSnapshotAge") + End If + End Set + End Property + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged Protected Sub RaisePropertyChanged(ByVal propertyName As String) @@ -3256,248 +3341,248 @@ Namespace EDMIServiceReference Public Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCache Return MyBase.Channel.ReturnDatatableFromCache(Name, FilterExpression, SortByColumn) End Function - + Public Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCacheAsync Return MyBase.Channel.ReturnDatatableFromCacheAsync(Name, FilterExpression, SortByColumn) End Function - + Public Function ReturnDatatable(ByVal pData As EDMIServiceReference.GetDatatableRequest) As EDMIServiceReference.GetDatatableResponse Implements EDMIServiceReference.IEDMIService.ReturnDatatable Return MyBase.Channel.ReturnDatatable(pData) End Function - + Public Function ReturnDatatableAsync(ByVal pData As EDMIServiceReference.GetDatatableRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetDatatableResponse) Implements EDMIServiceReference.IEDMIService.ReturnDatatableAsync Return MyBase.Channel.ReturnDatatableAsync(pData) End Function - + Public Function ReturnScalarValue(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As EDMIServiceReference.GetScalarValueResponse Implements EDMIServiceReference.IEDMIService.ReturnScalarValue Return MyBase.Channel.ReturnScalarValue(pData) End Function - + Public Function ReturnScalarValueAsync(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetScalarValueResponse) Implements EDMIServiceReference.IEDMIService.ReturnScalarValueAsync Return MyBase.Channel.ReturnScalarValueAsync(pData) End Function - + Public Function ExecuteNonQuery(ByVal pData As EDMIServiceReference.ExecuteNonQueryRequest) As EDMIServiceReference.ExecuteNonQueryResponse Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery Return MyBase.Channel.ExecuteNonQuery(pData) End Function - + Public Function ExecuteNonQueryAsync(ByVal pData As EDMIServiceReference.ExecuteNonQueryRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ExecuteNonQueryResponse) Implements EDMIServiceReference.IEDMIService.ExecuteNonQueryAsync Return MyBase.Channel.ExecuteNonQueryAsync(pData) End Function - + Public Function ReturnDatatable_Firebird(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_Firebird Return MyBase.Channel.ReturnDatatable_Firebird(SQL) End Function - + Public Function ReturnDatatable_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatable_FirebirdAsync Return MyBase.Channel.ReturnDatatable_FirebirdAsync(SQL) End Function - + Public Function ReturnScalar_Firebird(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMIService.ReturnScalar_Firebird Return MyBase.Channel.ReturnScalar_Firebird(SQL) End Function - + Public Function ReturnScalar_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMIService.ReturnScalar_FirebirdAsync Return MyBase.Channel.ReturnScalar_FirebirdAsync(SQL) End Function - + Public Function ExecuteNonQuery_Firebird(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_Firebird Return MyBase.Channel.ExecuteNonQuery_Firebird(SQL) End Function - + Public Function ExecuteNonQuery_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_FirebirdAsync Return MyBase.Channel.ExecuteNonQuery_FirebirdAsync(SQL) End Function - + Public Function ReturnDatatable_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_IDB Return MyBase.Channel.ReturnDatatable_MSSQL_IDB(SQL) End Function - + Public Function ReturnDatatable_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_IDBAsync Return MyBase.Channel.ReturnDatatable_MSSQL_IDBAsync(SQL) End Function - + Public Function ReturnScalar_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_IDB Return MyBase.Channel.ReturnScalar_MSSQL_IDB(SQL) End Function - + Public Function ReturnScalar_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_IDBAsync Return MyBase.Channel.ReturnScalar_MSSQL_IDBAsync(SQL) End Function - + Public Function ExecuteNonQuery_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_IDB Return MyBase.Channel.ExecuteNonQuery_MSSQL_IDB(SQL) End Function - + Public Function ExecuteNonQuery_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_IDBAsync Return MyBase.Channel.ExecuteNonQuery_MSSQL_IDBAsync(SQL) End Function - + Public Function ReturnDatatable_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_ECM Return MyBase.Channel.ReturnDatatable_MSSQL_ECM(SQL) End Function - + Public Function ReturnDatatable_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_ECMAsync Return MyBase.Channel.ReturnDatatable_MSSQL_ECMAsync(SQL) End Function - + Public Function ReturnScalar_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_ECM Return MyBase.Channel.ReturnScalar_MSSQL_ECM(SQL) End Function - + Public Function ReturnScalar_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_ECMAsync Return MyBase.Channel.ReturnScalar_MSSQL_ECMAsync(SQL) End Function - + Public Function ExecuteNonQuery_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_ECM Return MyBase.Channel.ExecuteNonQuery_MSSQL_ECM(SQL) End Function - + Public Function ExecuteNonQuery_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_ECMAsync Return MyBase.Channel.ExecuteNonQuery_MSSQL_ECMAsync(SQL) End Function - + Public Function NewFile(ByVal Data As EDMIServiceReference.NewFileRequest) As EDMIServiceReference.NewFileResponse Implements EDMIServiceReference.IEDMIService.NewFile Return MyBase.Channel.NewFile(Data) End Function - + Public Function NewFileAsync(ByVal Data As EDMIServiceReference.NewFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.NewFileResponse) Implements EDMIServiceReference.IEDMIService.NewFileAsync Return MyBase.Channel.NewFileAsync(Data) End Function - + Public Function UpdateFile(ByVal Data As EDMIServiceReference.UpdateFileRequest) As EDMIServiceReference.UpdateFileResponse Implements EDMIServiceReference.IEDMIService.UpdateFile Return MyBase.Channel.UpdateFile(Data) End Function - + Public Function UpdateFileAsync(ByVal Data As EDMIServiceReference.UpdateFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.UpdateFileResponse) Implements EDMIServiceReference.IEDMIService.UpdateFileAsync Return MyBase.Channel.UpdateFileAsync(Data) End Function - + Public Function SetAttributeValue(ByVal Data As EDMIServiceReference.SetAttributeValueRequest) As EDMIServiceReference.SetAttributeValueResponse Implements EDMIServiceReference.IEDMIService.SetAttributeValue Return MyBase.Channel.SetAttributeValue(Data) End Function - + Public Function SetAttributeValueAsync(ByVal Data As EDMIServiceReference.SetAttributeValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.SetAttributeValueResponse) Implements EDMIServiceReference.IEDMIService.SetAttributeValueAsync Return MyBase.Channel.SetAttributeValueAsync(Data) End Function - + Public Function GetAttributeValue(ByVal Data As EDMIServiceReference.GetAttributeValueRequest) As EDMIServiceReference.GetAttributeValueResponse Implements EDMIServiceReference.IEDMIService.GetAttributeValue Return MyBase.Channel.GetAttributeValue(Data) End Function - + Public Function GetAttributeValueAsync(ByVal Data As EDMIServiceReference.GetAttributeValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetAttributeValueResponse) Implements EDMIServiceReference.IEDMIService.GetAttributeValueAsync Return MyBase.Channel.GetAttributeValueAsync(Data) End Function - + Public Function GetFileObject(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As EDMIServiceReference.GetFileObjectResponse Implements EDMIServiceReference.IEDMIService.GetFileObject Return MyBase.Channel.GetFileObject(Data) End Function - + Public Function GetFileObjectAsync(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetFileObjectResponse) Implements EDMIServiceReference.IEDMIService.GetFileObjectAsync Return MyBase.Channel.GetFileObjectAsync(Data) End Function - + Public Function CheckInOutFile(ByVal Data As EDMIServiceReference.CheckInOutFileRequest) As EDMIServiceReference.CheckInOutFileResponse Implements EDMIServiceReference.IEDMIService.CheckInOutFile Return MyBase.Channel.CheckInOutFile(Data) End Function - + Public Function CheckInOutFileAsync(ByVal Data As EDMIServiceReference.CheckInOutFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.CheckInOutFileResponse) Implements EDMIServiceReference.IEDMIService.CheckInOutFileAsync Return MyBase.Channel.CheckInOutFileAsync(Data) End Function - + Public Function ImportFile(ByVal Data As EDMIServiceReference.ImportFileRequest) As EDMIServiceReference.ImportFileResponse Implements EDMIServiceReference.IEDMIService.ImportFile Return MyBase.Channel.ImportFile(Data) End Function - + Public Function ImportFileAsync(ByVal Data As EDMIServiceReference.ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ImportFileResponse) Implements EDMIServiceReference.IEDMIService.ImportFileAsync Return MyBase.Channel.ImportFileAsync(Data) End Function - + Public Function Globix_ImportFile(ByVal Data As EDMIServiceReference.Globix_ImportFileRequest) As EDMIServiceReference.Globix_ImportFileResponse Implements EDMIServiceReference.IEDMIService.Globix_ImportFile Return MyBase.Channel.Globix_ImportFile(Data) End Function - + Public Function Globix_ImportFileAsync(ByVal Data As EDMIServiceReference.Globix_ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.Globix_ImportFileResponse) Implements EDMIServiceReference.IEDMIService.Globix_ImportFileAsync Return MyBase.Channel.Globix_ImportFileAsync(Data) End Function - - + + _ Function EDMIServiceReference_IEDMIService_GetFileByObjectId(ByVal request As EDMIServiceReference.DocumentStreamRequest) As EDMIServiceReference.DocumentStreamResponse Implements EDMIServiceReference.IEDMIService.GetFileByObjectId Return MyBase.Channel.GetFileByObjectId(request) End Function - + Public Function GetFileByObjectId(ByVal ObjectId As Long, ByRef FileContents As System.IO.Stream) As String Dim inValue As EDMIServiceReference.DocumentStreamRequest = New EDMIServiceReference.DocumentStreamRequest() inValue.ObjectId = ObjectId - Dim retVal As EDMIServiceReference.DocumentStreamResponse = CType(Me, EDMIServiceReference.IEDMIService).GetFileByObjectId(inValue) + Dim retVal As EDMIServiceReference.DocumentStreamResponse = CType(Me,EDMIServiceReference.IEDMIService).GetFileByObjectId(inValue) FileContents = retVal.FileContents Return retVal.FileName End Function - - + + _ Function EDMIServiceReference_IEDMIService_GetFileByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentStreamRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentStreamResponse) Implements EDMIServiceReference.IEDMIService.GetFileByObjectIdAsync Return MyBase.Channel.GetFileByObjectIdAsync(request) End Function - + Public Function GetFileByObjectIdAsync(ByVal ObjectId As Long) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentStreamResponse) Dim inValue As EDMIServiceReference.DocumentStreamRequest = New EDMIServiceReference.DocumentStreamRequest() inValue.ObjectId = ObjectId - Return CType(Me, EDMIServiceReference.IEDMIService).GetFileByObjectIdAsync(inValue) + Return CType(Me,EDMIServiceReference.IEDMIService).GetFileByObjectIdAsync(inValue) End Function - - + + _ Function EDMIServiceReference_IEDMIService_GetFileInfoByObjectId(ByVal request As EDMIServiceReference.DocumentInfoRequest) As EDMIServiceReference.DocumentInfoResponse Implements EDMIServiceReference.IEDMIService.GetFileInfoByObjectId Return MyBase.Channel.GetFileInfoByObjectId(request) End Function - + Public Function GetFileInfoByObjectId(ByVal ObjectId As Long, ByVal UserId As Long, ByRef FullPath As String) As EDMIServiceReference.RightsAccessRight Dim inValue As EDMIServiceReference.DocumentInfoRequest = New EDMIServiceReference.DocumentInfoRequest() inValue.ObjectId = ObjectId inValue.UserId = UserId - Dim retVal As EDMIServiceReference.DocumentInfoResponse = CType(Me, EDMIServiceReference.IEDMIService).GetFileInfoByObjectId(inValue) + Dim retVal As EDMIServiceReference.DocumentInfoResponse = CType(Me,EDMIServiceReference.IEDMIService).GetFileInfoByObjectId(inValue) FullPath = retVal.FullPath Return retVal.FileRight End Function - + Public Function GetFileInfoByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentInfoRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentInfoResponse) Implements EDMIServiceReference.IEDMIService.GetFileInfoByObjectIdAsync Return MyBase.Channel.GetFileInfoByObjectIdAsync(request) End Function - - + + _ Function EDMIServiceReference_IEDMIService_ListFilesForUser(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As EDMIServiceReference.DocumentListResponse Implements EDMIServiceReference.IEDMIService.ListFilesForUser Return MyBase.Channel.ListFilesForUser(request) End Function - + Public Function ListFilesForUser() As System.Data.DataTable Dim inValue As EDMIServiceReference.ListFilesForUserRequest = New EDMIServiceReference.ListFilesForUserRequest() - Dim retVal As EDMIServiceReference.DocumentListResponse = CType(Me, EDMIServiceReference.IEDMIService).ListFilesForUser(inValue) + Dim retVal As EDMIServiceReference.DocumentListResponse = CType(Me,EDMIServiceReference.IEDMIService).ListFilesForUser(inValue) Return retVal.Datatable End Function - - + + _ Function EDMIServiceReference_IEDMIService_ListFilesForUserAsync(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentListResponse) Implements EDMIServiceReference.IEDMIService.ListFilesForUserAsync Return MyBase.Channel.ListFilesForUserAsync(request) End Function - + Public Function ListFilesForUserAsync() As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentListResponse) Dim inValue As EDMIServiceReference.ListFilesForUserRequest = New EDMIServiceReference.ListFilesForUserRequest() - Return CType(Me, EDMIServiceReference.IEDMIService).ListFilesForUserAsync(inValue) + Return CType(Me,EDMIServiceReference.IEDMIService).ListFilesForUserAsync(inValue) End Function - - + + _ Function EDMIServiceReference_IEDMIService_TestObjectIdExists(ByVal request As EDMIServiceReference.TestObjectIdExistsRequest) As EDMIServiceReference.TestObjectIdExistsResponse Implements EDMIServiceReference.IEDMIService.TestObjectIdExists Return MyBase.Channel.TestObjectIdExists(request) End Function - + Public Function TestObjectIdExists(ByVal ObjectId As Long, ByRef Exists As Boolean, ByRef Inactive As Boolean) As Boolean Dim inValue As EDMIServiceReference.TestObjectIdExistsRequest = New EDMIServiceReference.TestObjectIdExistsRequest() inValue.ObjectId = ObjectId - Dim retVal As EDMIServiceReference.TestObjectIdExistsResponse = CType(Me, EDMIServiceReference.IEDMIService).TestObjectIdExists(inValue) + Dim retVal As EDMIServiceReference.TestObjectIdExistsResponse = CType(Me,EDMIServiceReference.IEDMIService).TestObjectIdExists(inValue) Exists = retVal.Exists Inactive = retVal.Inactive Return retVal.Deleted End Function - + Public Function TestObjectIdExistsAsync(ByVal request As EDMIServiceReference.TestObjectIdExistsRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.TestObjectIdExistsResponse) Implements EDMIServiceReference.IEDMIService.TestObjectIdExistsAsync Return MyBase.Channel.TestObjectIdExistsAsync(request) End Function diff --git a/EDMIAPI/Connected Services/EDMIServiceReference/configuration.svcinfo b/EDMIAPI/Connected Services/EDMIServiceReference/configuration.svcinfo index 42412f6c..69083009 100644 --- a/EDMIAPI/Connected Services/EDMIServiceReference/configuration.svcinfo +++ b/EDMIAPI/Connected Services/EDMIServiceReference/configuration.svcinfo @@ -1,5 +1,5 @@  - + diff --git a/EDMIAPI/Connected Services/EDMIServiceReference/configuration91.svcinfo b/EDMIAPI/Connected Services/EDMIServiceReference/configuration91.svcinfo index fe0f5a59..1c1f1177 100644 --- a/EDMIAPI/Connected Services/EDMIServiceReference/configuration91.svcinfo +++ b/EDMIAPI/Connected Services/EDMIServiceReference/configuration91.svcinfo @@ -1,5 +1,5 @@ - + diff --git a/EDMIAPI/DatabaseWithFallback.vb b/EDMIAPI/DatabaseWithFallback.vb index 80f35f53..a1f8d387 100644 --- a/EDMIAPI/DatabaseWithFallback.vb +++ b/EDMIAPI/DatabaseWithFallback.vb @@ -342,14 +342,17 @@ Public Class DatabaseWithFallback End Function Private Async Function GetDatatableFromServiceAsync(pSQLCommand As String, DatabaseType As Constants.DatabaseType, pConnectionId As Integer) As Task(Of DataTable) - Dim oFallback As Boolean = False - _Logger.Debug("GetDatatableFromServiceAsync: GetDatatableFromServiceAsync called with SQL [{0}], DatabaseType [{1}], ConnectionId [{2}]", pSQLCommand, DatabaseType.ToString, pConnectionId) + _Logger.Debug("GetDatatableFromServiceAsync called | SQL=[{0}] | DB=[{1}] | ConnId=[{2}]", + pSQLCommand, DatabaseType.ToString, pConnectionId) + If _Client Is Nothing OrElse _ClientConfig?.ForceDirectDatabaseAccess Then - Return Await Task.Run(Function() GetDatatableFromDatabase(pSQLCommand, DatabaseType, pConnectionId)) + ' ← Kein Task.Run: direkt synchron, Thread ist ohnehin frei + Return GetDatatableFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End If - Dim oResult As GetDatatableResponse = Nothing Try + Dim oResult As GetDatatableResponse = Nothing + Select Case DatabaseType Case Constants.DatabaseType.ECM oResult = Await _Client.GetDatatableFromECMAsync(pSQLCommand) @@ -360,20 +363,22 @@ Public Class DatabaseWithFallback End Select If oResult Is Nothing OrElse oResult.OK = False Then - _Logger.Warn("⚠ GetDatatableFromServiceAsync failed. Falling back to direct database access.") - oFallback = True + _Logger.Warn("⚠ GetDatatableFromServiceAsync failed | Fallback to DB | Error=[{0}]", + If(oResult Is Nothing, "null", oResult.ErrorMessage)) + Return GetDatatableFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End If + + Return oResult.Table + + Catch ex As InvalidOperationException + _Logger.Warn("⚠ GetDatatableFromServiceAsync offline: [{0}] | Fallback to DB", ex.Message) + Return GetDatatableFromDatabase(pSQLCommand, DatabaseType, pConnectionId) + Catch ex As Exception - _Logger.Warn("⚠ GetDatatableFromServiceAsync failed. Falling back to direct database access.") + _Logger.Warn("⚠ GetDatatableFromServiceAsync failed | Fallback to DB") _Logger.Error(ex) - oFallback = True + Return GetDatatableFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End Try - - If oFallback Then - Return Await Task.Run(Function() GetDatatableFromDatabase(pSQLCommand, DatabaseType, pConnectionId)) - End If - - Return oResult.Table End Function Private Function GetDatatableFromDatabase(pSQLCommand As String, pDatabaseType As Constants.DatabaseType, pConnectionId As Integer) As DataTable Try @@ -401,16 +406,16 @@ Public Class DatabaseWithFallback End Try End Function Private Async Function GetScalarValueFromServiceAsync(pSQLCommand As String, DatabaseType As Constants.DatabaseType, pConnectionId As Integer) As Task(Of Object) - Dim oFallback As Boolean = False - - _Logger.Debug("GetScalarValueFromServiceAsync called with SQL [{0}], DatabaseType [{1}], ConnectionId [{2}]", pSQLCommand, DatabaseType.ToString, pConnectionId) + _Logger.Debug("GetScalarValueFromServiceAsync called | SQL=[{0}] | DB=[{1}] | ConnId=[{2}]", + pSQLCommand, DatabaseType.ToString, pConnectionId) If _Client Is Nothing OrElse _ClientConfig?.ForceDirectDatabaseAccess Then - Return Await Task.Run(Function() GetScalarValueFromDatabase(pSQLCommand, DatabaseType, pConnectionId)) + Return GetScalarValueFromDatabase(pSQLCommand, DatabaseType, pConnectionId) ' ← kein Task.Run End If - Dim oResult As GetScalarValueResponse = Nothing Try + Dim oResult As GetScalarValueResponse = Nothing + Select Case DatabaseType Case Constants.DatabaseType.ECM oResult = Await _Client.GetScalarValueFromECMAsync(pSQLCommand) @@ -421,20 +426,21 @@ Public Class DatabaseWithFallback End Select If oResult Is Nothing OrElse oResult.OK = False Then - _Logger.Warn("⚠ GetScalarValueFromServiceAsync failed. Falling back to direct database access.") - oFallback = True + _Logger.Warn("⚠ GetScalarValueFromServiceAsync failed | Fallback to DB") + Return GetScalarValueFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End If + + Return oResult.Scalar + + Catch ex As InvalidOperationException + _Logger.Warn("⚠ GetScalarValueFromServiceAsync offline: [{0}] | Fallback to DB", ex.Message) + Return GetScalarValueFromDatabase(pSQLCommand, DatabaseType, pConnectionId) + Catch ex As Exception - _Logger.Warn("⚠ GetScalarValueFromServiceAsync failed. Falling back to direct database access.") + _Logger.Warn("⚠ GetScalarValueFromServiceAsync failed | Fallback to DB") _Logger.Error(ex) - oFallback = True + Return GetScalarValueFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End Try - - If oFallback Then - Return Await Task.Run(Function() GetScalarValueFromDatabase(pSQLCommand, DatabaseType, pConnectionId)) - End If - - Return oResult.Scalar End Function Private Function GetScalarValueFromService(pSQLCommand As String, DatabaseType As Constants.DatabaseType, pConnectionId As Integer) As Object Try @@ -493,16 +499,16 @@ Public Class DatabaseWithFallback End Try End Function Private Async Function ExecuteNonQueryFromServiceAsync(pSQLCommand As String, DatabaseType As Constants.DatabaseType, pConnectionId As Integer) As Task(Of Boolean) - Dim oFallback As Boolean = False - - _Logger.Debug("ExecuteNonQueryFromServiceAsync called with SQL [{0}], DatabaseType [{1}], ConnectionId [{2}]", pSQLCommand, DatabaseType.ToString, pConnectionId) + _Logger.Debug("ExecuteNonQueryFromServiceAsync called | SQL=[{0}] | DB=[{1}] | ConnId=[{2}]", + pSQLCommand, DatabaseType.ToString, pConnectionId) If _Client Is Nothing OrElse _ClientConfig?.ForceDirectDatabaseAccess Then - Return Await Task.Run(Function() ExecuteNonQueryFromDatabase(pSQLCommand, DatabaseType, pConnectionId)) + Return ExecuteNonQueryFromDatabase(pSQLCommand, DatabaseType, pConnectionId) ' ← kein Task.Run End If - Dim oResult As ExecuteNonQueryResponse = Nothing Try + Dim oResult As ExecuteNonQueryResponse = Nothing + Select Case DatabaseType Case Constants.DatabaseType.ECM oResult = Await _Client.ExecuteNonQueryFromECMAsync(pSQLCommand) @@ -513,20 +519,21 @@ Public Class DatabaseWithFallback End Select If oResult Is Nothing OrElse oResult.OK = False Then - _Logger.Warn("⚠ ExecuteNonQueryFromServiceAsync failed. Falling back to direct database access.") - oFallback = True + _Logger.Warn("⚠ ExecuteNonQueryFromServiceAsync failed | Fallback to DB") + Return ExecuteNonQueryFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End If + + Return oResult.Result + + Catch ex As InvalidOperationException + _Logger.Warn("⚠ ExecuteNonQueryFromServiceAsync offline: [{0}] | Fallback to DB", ex.Message) + Return ExecuteNonQueryFromDatabase(pSQLCommand, DatabaseType, pConnectionId) + Catch ex As Exception - _Logger.Warn("⚠ ExecuteNonQueryFromServiceAsync failed. Falling back to direct database access.") + _Logger.Warn("⚠ ExecuteNonQueryFromServiceAsync failed | Fallback to DB") _Logger.Error(ex) - oFallback = True + Return ExecuteNonQueryFromDatabase(pSQLCommand, DatabaseType, pConnectionId) End Try - - If oFallback Then - Return Await Task.Run(Function() ExecuteNonQueryFromDatabase(pSQLCommand, DatabaseType, pConnectionId)) - End If - - Return oResult.Result End Function Private Function ExecuteNonQueryFromService(pSQLCommand As String, DatabaseType As Constants.DatabaseType, pConnectionId As Integer) As Boolean Try diff --git a/EDMIAPI/My Project/AssemblyInfo.vb b/EDMIAPI/My Project/AssemblyInfo.vb index 1ef4ff0e..2d7aae46 100644 --- a/EDMIAPI/My Project/AssemblyInfo.vb +++ b/EDMIAPI/My Project/AssemblyInfo.vb @@ -13,7 +13,7 @@ Imports System.Runtime.InteropServices - + @@ -31,5 +31,5 @@ Imports System.Runtime.InteropServices ' übernehmen, indem Sie "*" eingeben: ' - + diff --git a/EDMIAPI/Reference.vb b/EDMIAPI/Reference.vb new file mode 100644 index 00000000..b7ca66f0 --- /dev/null +++ b/EDMIAPI/Reference.vb @@ -0,0 +1,3401 @@ +'------------------------------------------------------------------------------ +' +' Dieser Code wurde von einem Tool generiert. +' Laufzeitversion:4.0.30319.42000 +' +' Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn +' der Code erneut generiert wird. +' +'------------------------------------------------------------------------------ + +Option Strict On +Option Explicit On + +Imports System +Imports System.Runtime.Serialization + +Namespace EDMIServiceReference + + _ + Partial Public Class BaseResponse + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ErrorDetailsField As String + + _ + Private ErrorMessageField As String + + _ + Private OKField As Boolean + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ErrorDetails() As String + Get + Return Me.ErrorDetailsField + End Get + Set + If (Object.ReferenceEquals(Me.ErrorDetailsField, value) <> true) Then + Me.ErrorDetailsField = value + Me.RaisePropertyChanged("ErrorDetails") + End If + End Set + End Property + + _ + Public Property ErrorMessage() As String + Get + Return Me.ErrorMessageField + End Get + Set + If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then + Me.ErrorMessageField = value + Me.RaisePropertyChanged("ErrorMessage") + End If + End Set + End Property + + _ + Public Property OK() As Boolean + Get + Return Me.OKField + End Get + Set + If (Me.OKField.Equals(value) <> true) Then + Me.OKField = value + Me.RaisePropertyChanged("OK") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class TableResult + Inherits EDMIServiceReference.BaseResponse + + _ + Private TableField As System.Data.DataTable + + _ + Public Property Table() As System.Data.DataTable + Get + Return Me.TableField + End Get + Set + If (Object.ReferenceEquals(Me.TableField, value) <> true) Then + Me.TableField = value + Me.RaisePropertyChanged("Table") + End If + End Set + End Property + End Class + + _ + Partial Public Class ScalarResult + Inherits EDMIServiceReference.BaseResponse + + _ + Private ScalarField As Object + + _ + Public Property Scalar() As Object + Get + Return Me.ScalarField + End Get + Set + If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then + Me.ScalarField = value + Me.RaisePropertyChanged("Scalar") + End If + End Set + End Property + End Class + + _ + Partial Public Class NonQueryResult + Inherits EDMIServiceReference.BaseResponse + End Class + + _ + Partial Public Class GetDatatableResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private TableField As System.Data.DataTable + + _ + Public Property Table() As System.Data.DataTable + Get + Return Me.TableField + End Get + Set + If (Object.ReferenceEquals(Me.TableField, value) <> true) Then + Me.TableField = value + Me.RaisePropertyChanged("Table") + End If + End Set + End Property + End Class + + _ + Partial Public Class GetScalarValueResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ScalarField As Object + + _ + Public Property Scalar() As Object + Get + Return Me.ScalarField + End Get + Set + If (Object.ReferenceEquals(Me.ScalarField, value) <> true) Then + Me.ScalarField = value + Me.RaisePropertyChanged("Scalar") + End If + End Set + End Property + End Class + + _ + Partial Public Class ExecuteNonQueryResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ResultField As Boolean + + _ + Public Property Result() As Boolean + Get + Return Me.ResultField + End Get + Set + If (Me.ResultField.Equals(value) <> true) Then + Me.ResultField = value + Me.RaisePropertyChanged("Result") + End If + End Set + End Property + End Class + + _ + Partial Public Class NewFileResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + End Class + + _ + Partial Public Class UpdateFileResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + End Class + + _ + Partial Public Class SetAttributeValueResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + End Class + + _ + Partial Public Class GetAttributeValueResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Private ValueField As Object + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + + _ + Public Property Value() As Object + Get + Return Me.ValueField + End Get + Set + If (Object.ReferenceEquals(Me.ValueField, value) <> true) Then + Me.ValueField = value + Me.RaisePropertyChanged("Value") + End If + End Set + End Property + End Class + + _ + Partial Public Class GetFileObjectResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private FileObjectField As EDMIServiceReference.FileObject + + _ + Public Property FileObject() As EDMIServiceReference.FileObject + Get + Return Me.FileObjectField + End Get + Set + If (Object.ReferenceEquals(Me.FileObjectField, value) <> true) Then + Me.FileObjectField = value + Me.RaisePropertyChanged("FileObject") + End If + End Set + End Property + End Class + + _ + Partial Public Class CheckInOutFileResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + End Class + + _ + Partial Public Class ImportFileResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + End Class + + _ + Partial Public Class Globix_ImportFileResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ObjectIdField As Long + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + End Class + + _ + Partial Public Class GetClientConfigResponse + Inherits EDMIServiceReference.BaseResponse + + _ + Private ClientConfigField As EDMIServiceReference.GlobalStateClientConfiguration + + _ + Public Property ClientConfig() As EDMIServiceReference.GlobalStateClientConfiguration + Get + Return Me.ClientConfigField + End Get + Set + If (Object.ReferenceEquals(Me.ClientConfigField, value) <> true) Then + Me.ClientConfigField = value + Me.RaisePropertyChanged("ClientConfig") + End If + End Set + End Property + End Class + + _ + Partial Public Class GlobalStateClientConfiguration + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ConnectionStringECMField As String + + _ + Private ConnectionStringIDBField As String + + _ + Private DocumentTypesField() As EDMIServiceReference.GlobalStateDoctype + + _ + Private ForceDirectDatabaseAccessField As Boolean + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ConnectionStringECM() As String + Get + Return Me.ConnectionStringECMField + End Get + Set + If (Object.ReferenceEquals(Me.ConnectionStringECMField, value) <> true) Then + Me.ConnectionStringECMField = value + Me.RaisePropertyChanged("ConnectionStringECM") + End If + End Set + End Property + + _ + Public Property ConnectionStringIDB() As String + Get + Return Me.ConnectionStringIDBField + End Get + Set + If (Object.ReferenceEquals(Me.ConnectionStringIDBField, value) <> true) Then + Me.ConnectionStringIDBField = value + Me.RaisePropertyChanged("ConnectionStringIDB") + End If + End Set + End Property + + _ + Public Property DocumentTypes() As EDMIServiceReference.GlobalStateDoctype() + Get + Return Me.DocumentTypesField + End Get + Set + If (Object.ReferenceEquals(Me.DocumentTypesField, value) <> true) Then + Me.DocumentTypesField = value + Me.RaisePropertyChanged("DocumentTypes") + End If + End Set + End Property + + _ + Public Property ForceDirectDatabaseAccess() As Boolean + Get + Return Me.ForceDirectDatabaseAccessField + End Get + Set + If (Me.ForceDirectDatabaseAccessField.Equals(value) <> true) Then + Me.ForceDirectDatabaseAccessField = value + Me.RaisePropertyChanged("ForceDirectDatabaseAccess") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class GlobalStateDoctype + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private FileChangedActionField As String + + _ + Private NameField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property FileChangedAction() As String + Get + Return Me.FileChangedActionField + End Get + Set + If (Object.ReferenceEquals(Me.FileChangedActionField, value) <> true) Then + Me.FileChangedActionField = value + Me.RaisePropertyChanged("FileChangedAction") + End If + End Set + End Property + + _ + Public Property Name() As String + Get + Return Me.NameField + End Get + Set + If (Object.ReferenceEquals(Me.NameField, value) <> true) Then + Me.NameField = value + Me.RaisePropertyChanged("Name") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class UnexpectedErrorFault + Inherits EDMIServiceReference.BaseFault + End Class + + _ + Partial Public Class BaseFault + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ErrorMessageField As String + + _ + Private InnerExceptionField As System.Exception + + _ + Private IsRecoverableField As Boolean + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ErrorMessage() As String + Get + Return Me.ErrorMessageField + End Get + Set + If (Object.ReferenceEquals(Me.ErrorMessageField, value) <> true) Then + Me.ErrorMessageField = value + Me.RaisePropertyChanged("ErrorMessage") + End If + End Set + End Property + + _ + Public Property InnerException() As System.Exception + Get + Return Me.InnerExceptionField + End Get + Set + If (Object.ReferenceEquals(Me.InnerExceptionField, value) <> true) Then + Me.InnerExceptionField = value + Me.RaisePropertyChanged("InnerException") + End If + End Set + End Property + + _ + Public Property IsRecoverable() As Boolean + Get + Return Me.IsRecoverableField + End Get + Set + If (Me.IsRecoverableField.Equals(value) <> true) Then + Me.IsRecoverableField = value + Me.RaisePropertyChanged("IsRecoverable") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class DataTableDoesNotExistFault + Inherits EDMIServiceReference.BaseFault + End Class + + _ + Partial Public Class ObjectDoesNotExistFault + Inherits EDMIServiceReference.BaseFault + End Class + + _ + Partial Public Class GetDatatableRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ConnectionIdField As Integer + + _ + Private DatabaseTypeField As EDMIServiceReference.DatabaseType + + _ + Private NamedDatabaseField As EDMIServiceReference.DatabaseName + + _ + Private SqlCommandField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ConnectionId() As Integer + Get + Return Me.ConnectionIdField + End Get + Set + If (Me.ConnectionIdField.Equals(value) <> true) Then + Me.ConnectionIdField = value + Me.RaisePropertyChanged("ConnectionId") + End If + End Set + End Property + + _ + Public Property DatabaseType() As EDMIServiceReference.DatabaseType + Get + Return Me.DatabaseTypeField + End Get + Set + If (Me.DatabaseTypeField.Equals(value) <> true) Then + Me.DatabaseTypeField = value + Me.RaisePropertyChanged("DatabaseType") + End If + End Set + End Property + + _ + Public Property NamedDatabase() As EDMIServiceReference.DatabaseName + Get + Return Me.NamedDatabaseField + End Get + Set + If (Me.NamedDatabaseField.Equals(value) <> true) Then + Me.NamedDatabaseField = value + Me.RaisePropertyChanged("NamedDatabase") + End If + End Set + End Property + + _ + Public Property SqlCommand() As String + Get + Return Me.SqlCommandField + End Get + Set + If (Object.ReferenceEquals(Me.SqlCommandField, value) <> true) Then + Me.SqlCommandField = value + Me.RaisePropertyChanged("SqlCommand") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Public Enum DatabaseType As Integer + + _ + MSSQL = 0 + + _ + Oracle = 1 + + _ + ODBC = 2 + End Enum + + _ + Public Enum DatabaseName As Integer + + _ + None = 0 + + _ + ECM = 1 + + _ + IDB = 2 + End Enum + + _ + Partial Public Class GetScalarValueRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ConnectionIdField As Integer + + _ + Private DatabaseTypeField As EDMIServiceReference.DatabaseType + + _ + Private NamedDatabaseField As EDMIServiceReference.DatabaseName + + _ + Private SqlCommandField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ConnectionId() As Integer + Get + Return Me.ConnectionIdField + End Get + Set + If (Me.ConnectionIdField.Equals(value) <> true) Then + Me.ConnectionIdField = value + Me.RaisePropertyChanged("ConnectionId") + End If + End Set + End Property + + _ + Public Property DatabaseType() As EDMIServiceReference.DatabaseType + Get + Return Me.DatabaseTypeField + End Get + Set + If (Me.DatabaseTypeField.Equals(value) <> true) Then + Me.DatabaseTypeField = value + Me.RaisePropertyChanged("DatabaseType") + End If + End Set + End Property + + _ + Public Property NamedDatabase() As EDMIServiceReference.DatabaseName + Get + Return Me.NamedDatabaseField + End Get + Set + If (Me.NamedDatabaseField.Equals(value) <> true) Then + Me.NamedDatabaseField = value + Me.RaisePropertyChanged("NamedDatabase") + End If + End Set + End Property + + _ + Public Property SqlCommand() As String + Get + Return Me.SqlCommandField + End Get + Set + If (Object.ReferenceEquals(Me.SqlCommandField, value) <> true) Then + Me.SqlCommandField = value + Me.RaisePropertyChanged("SqlCommand") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class ExecuteNonQueryRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ConnectionIdField As Integer + + _ + Private DatabaseTypeField As EDMIServiceReference.DatabaseType + + _ + Private NamedDatabaseField As EDMIServiceReference.DatabaseName + + _ + Private SqlCommandField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ConnectionId() As Integer + Get + Return Me.ConnectionIdField + End Get + Set + If (Me.ConnectionIdField.Equals(value) <> true) Then + Me.ConnectionIdField = value + Me.RaisePropertyChanged("ConnectionId") + End If + End Set + End Property + + _ + Public Property DatabaseType() As EDMIServiceReference.DatabaseType + Get + Return Me.DatabaseTypeField + End Get + Set + If (Me.DatabaseTypeField.Equals(value) <> true) Then + Me.DatabaseTypeField = value + Me.RaisePropertyChanged("DatabaseType") + End If + End Set + End Property + + _ + Public Property NamedDatabase() As EDMIServiceReference.DatabaseName + Get + Return Me.NamedDatabaseField + End Get + Set + If (Me.NamedDatabaseField.Equals(value) <> true) Then + Me.NamedDatabaseField = value + Me.RaisePropertyChanged("NamedDatabase") + End If + End Set + End Property + + _ + Public Property SqlCommand() As String + Get + Return Me.SqlCommandField + End Get + Set + If (Object.ReferenceEquals(Me.SqlCommandField, value) <> true) Then + Me.SqlCommandField = value + Me.RaisePropertyChanged("SqlCommand") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class NewFileRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private FileField As EDMIServiceReference.FileProperties + + _ + Private IDBDoctypeIdField As Long + + _ + Private KindTypeField As String + + _ + Private StoreNameField As String + + _ + Private UserField As EDMIServiceReference.UserState + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property File() As EDMIServiceReference.FileProperties + Get + Return Me.FileField + End Get + Set + If (Object.ReferenceEquals(Me.FileField, value) <> true) Then + Me.FileField = value + Me.RaisePropertyChanged("File") + End If + End Set + End Property + + _ + Public Property IDBDoctypeId() As Long + Get + Return Me.IDBDoctypeIdField + End Get + Set + If (Me.IDBDoctypeIdField.Equals(value) <> true) Then + Me.IDBDoctypeIdField = value + Me.RaisePropertyChanged("IDBDoctypeId") + End If + End Set + End Property + + _ + Public Property KindType() As String + Get + Return Me.KindTypeField + End Get + Set + If (Object.ReferenceEquals(Me.KindTypeField, value) <> true) Then + Me.KindTypeField = value + Me.RaisePropertyChanged("KindType") + End If + End Set + End Property + + _ + Public Property StoreName() As String + Get + Return Me.StoreNameField + End Get + Set + If (Object.ReferenceEquals(Me.StoreNameField, value) <> true) Then + Me.StoreNameField = value + Me.RaisePropertyChanged("StoreName") + End If + End Set + End Property + + _ + Public Property User() As EDMIServiceReference.UserState + Get + Return Me.UserField + End Get + Set + If (Object.ReferenceEquals(Me.UserField, value) <> true) Then + Me.UserField = value + Me.RaisePropertyChanged("User") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class FileProperties + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private FileChangedAtField As String + + _ + Private FileChecksumField As String + + _ + Private FileContentsField() As Byte + + _ + Private FileCreatedAtField As String + + _ + Private FileImportedAtField As Date + + _ + Private FileInfoRawField As System.IO.FileInfo + + _ + Private FileNameField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property FileChangedAt() As String + Get + Return Me.FileChangedAtField + End Get + Set + If (Object.ReferenceEquals(Me.FileChangedAtField, value) <> true) Then + Me.FileChangedAtField = value + Me.RaisePropertyChanged("FileChangedAt") + End If + End Set + End Property + + _ + Public Property FileChecksum() As String + Get + Return Me.FileChecksumField + End Get + Set + If (Object.ReferenceEquals(Me.FileChecksumField, value) <> true) Then + Me.FileChecksumField = value + Me.RaisePropertyChanged("FileChecksum") + End If + End Set + End Property + + _ + Public Property FileContents() As Byte() + Get + Return Me.FileContentsField + End Get + Set + If (Object.ReferenceEquals(Me.FileContentsField, value) <> true) Then + Me.FileContentsField = value + Me.RaisePropertyChanged("FileContents") + End If + End Set + End Property + + _ + Public Property FileCreatedAt() As String + Get + Return Me.FileCreatedAtField + End Get + Set + If (Object.ReferenceEquals(Me.FileCreatedAtField, value) <> true) Then + Me.FileCreatedAtField = value + Me.RaisePropertyChanged("FileCreatedAt") + End If + End Set + End Property + + _ + Public Property FileImportedAt() As Date + Get + Return Me.FileImportedAtField + End Get + Set + If (Me.FileImportedAtField.Equals(value) <> true) Then + Me.FileImportedAtField = value + Me.RaisePropertyChanged("FileImportedAt") + End If + End Set + End Property + + _ + Public Property FileInfoRaw() As System.IO.FileInfo + Get + Return Me.FileInfoRawField + End Get + Set + If (Object.ReferenceEquals(Me.FileInfoRawField, value) <> true) Then + Me.FileInfoRawField = value + Me.RaisePropertyChanged("FileInfoRaw") + End If + End Set + End Property + + _ + Public Property FileName() As String + Get + Return Me.FileNameField + End Get + Set + If (Object.ReferenceEquals(Me.FileNameField, value) <> true) Then + Me.FileNameField = value + Me.RaisePropertyChanged("FileName") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class UserAttributeValue + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ControlNameField As String + + _ + Private IdField As Integer + + _ + Private NameField As String + + _ + Private ValuesField() As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property ControlName() As String + Get + Return Me.ControlNameField + End Get + Set + If (Object.ReferenceEquals(Me.ControlNameField, value) <> true) Then + Me.ControlNameField = value + Me.RaisePropertyChanged("ControlName") + End If + End Set + End Property + + _ + Public Property Id() As Integer + Get + Return Me.IdField + End Get + Set + If (Me.IdField.Equals(value) <> true) Then + Me.IdField = value + Me.RaisePropertyChanged("Id") + End If + End Set + End Property + + _ + Public Property Name() As String + Get + Return Me.NameField + End Get + Set + If (Object.ReferenceEquals(Me.NameField, value) <> true) Then + Me.NameField = value + Me.RaisePropertyChanged("Name") + End If + End Set + End Property + + _ + Public Property Values() As String() + Get + Return Me.ValuesField + End Get + Set + If (Object.ReferenceEquals(Me.ValuesField, value) <> true) Then + Me.ValuesField = value + Me.RaisePropertyChanged("Values") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class UserState + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private DateFormatField As String + + _ + Private EmailField As String + + _ + Private GivenNameField As String + + _ + Private HideBasicConfigField As Boolean + + _ + Private IsAdminField As Boolean + + _ + Private LanguageField As String + + _ + Private LanguageIdField As Integer + + _ + Private MachineNameField As String + + _ + Private ShortNameField As String + + _ + Private SurnameField As String + + _ + Private UserIdField As Integer + + _ + Private UserNameField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property DateFormat() As String + Get + Return Me.DateFormatField + End Get + Set + If (Object.ReferenceEquals(Me.DateFormatField, value) <> true) Then + Me.DateFormatField = value + Me.RaisePropertyChanged("DateFormat") + End If + End Set + End Property + + _ + Public Property Email() As String + Get + Return Me.EmailField + End Get + Set + If (Object.ReferenceEquals(Me.EmailField, value) <> true) Then + Me.EmailField = value + Me.RaisePropertyChanged("Email") + End If + End Set + End Property + + _ + Public Property GivenName() As String + Get + Return Me.GivenNameField + End Get + Set + If (Object.ReferenceEquals(Me.GivenNameField, value) <> true) Then + Me.GivenNameField = value + Me.RaisePropertyChanged("GivenName") + End If + End Set + End Property + + _ + Public Property HideBasicConfig() As Boolean + Get + Return Me.HideBasicConfigField + End Get + Set + If (Me.HideBasicConfigField.Equals(value) <> true) Then + Me.HideBasicConfigField = value + Me.RaisePropertyChanged("HideBasicConfig") + End If + End Set + End Property + + _ + Public Property IsAdmin() As Boolean + Get + Return Me.IsAdminField + End Get + Set + If (Me.IsAdminField.Equals(value) <> true) Then + Me.IsAdminField = value + Me.RaisePropertyChanged("IsAdmin") + End If + End Set + End Property + + _ + Public Property Language() As String + Get + Return Me.LanguageField + End Get + Set + If (Object.ReferenceEquals(Me.LanguageField, value) <> true) Then + Me.LanguageField = value + Me.RaisePropertyChanged("Language") + End If + End Set + End Property + + _ + Public Property LanguageId() As Integer + Get + Return Me.LanguageIdField + End Get + Set + If (Me.LanguageIdField.Equals(value) <> true) Then + Me.LanguageIdField = value + Me.RaisePropertyChanged("LanguageId") + End If + End Set + End Property + + _ + Public Property MachineName() As String + Get + Return Me.MachineNameField + End Get + Set + If (Object.ReferenceEquals(Me.MachineNameField, value) <> true) Then + Me.MachineNameField = value + Me.RaisePropertyChanged("MachineName") + End If + End Set + End Property + + _ + Public Property ShortName() As String + Get + Return Me.ShortNameField + End Get + Set + If (Object.ReferenceEquals(Me.ShortNameField, value) <> true) Then + Me.ShortNameField = value + Me.RaisePropertyChanged("ShortName") + End If + End Set + End Property + + _ + Public Property Surname() As String + Get + Return Me.SurnameField + End Get + Set + If (Object.ReferenceEquals(Me.SurnameField, value) <> true) Then + Me.SurnameField = value + Me.RaisePropertyChanged("Surname") + End If + End Set + End Property + + _ + Public Property UserId() As Integer + Get + Return Me.UserIdField + End Get + Set + If (Me.UserIdField.Equals(value) <> true) Then + Me.UserIdField = value + Me.RaisePropertyChanged("UserId") + End If + End Set + End Property + + _ + Public Property UserName() As String + Get + Return Me.UserNameField + End Get + Set + If (Object.ReferenceEquals(Me.UserNameField, value) <> true) Then + Me.UserNameField = value + Me.RaisePropertyChanged("UserName") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class UpdateFileRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private CreateNewVersionField As Boolean + + _ + Private FileField As EDMIServiceReference.FileProperties + + _ + Private ObjectIdField As Long + + _ + Private UserField As EDMIServiceReference.UserState + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property CreateNewVersion() As Boolean + Get + Return Me.CreateNewVersionField + End Get + Set + If (Me.CreateNewVersionField.Equals(value) <> true) Then + Me.CreateNewVersionField = value + Me.RaisePropertyChanged("CreateNewVersion") + End If + End Set + End Property + + _ + Public Property File() As EDMIServiceReference.FileProperties + Get + Return Me.FileField + End Get + Set + If (Object.ReferenceEquals(Me.FileField, value) <> true) Then + Me.FileField = value + Me.RaisePropertyChanged("File") + End If + End Set + End Property + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + + _ + Public Property User() As EDMIServiceReference.UserState + Get + Return Me.UserField + End Get + Set + If (Object.ReferenceEquals(Me.UserField, value) <> true) Then + Me.UserField = value + Me.RaisePropertyChanged("User") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class SetAttributeValueRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private AttributeNameField As String + + _ + Private AttributeValueField As String + + _ + Private LanguageField As String + + _ + Private ObjectIdField As Long + + _ + Private WhoField As String + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property AttributeName() As String + Get + Return Me.AttributeNameField + End Get + Set + If (Object.ReferenceEquals(Me.AttributeNameField, value) <> true) Then + Me.AttributeNameField = value + Me.RaisePropertyChanged("AttributeName") + End If + End Set + End Property + + _ + Public Property AttributeValue() As String + Get + Return Me.AttributeValueField + End Get + Set + If (Object.ReferenceEquals(Me.AttributeValueField, value) <> true) Then + Me.AttributeValueField = value + Me.RaisePropertyChanged("AttributeValue") + End If + End Set + End Property + + _ + Public Property Language() As String + Get + Return Me.LanguageField + End Get + Set + If (Object.ReferenceEquals(Me.LanguageField, value) <> true) Then + Me.LanguageField = value + Me.RaisePropertyChanged("Language") + End If + End Set + End Property + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + + _ + Public Property Who() As String + Get + Return Me.WhoField + End Get + Set + If (Object.ReferenceEquals(Me.WhoField, value) <> true) Then + Me.WhoField = value + Me.RaisePropertyChanged("Who") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class GetAttributeValueRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private AttributeNameField As String + + _ + Private ObjectIdField As Long + + _ + Private UserField As EDMIServiceReference.UserState + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property AttributeName() As String + Get + Return Me.AttributeNameField + End Get + Set + If (Object.ReferenceEquals(Me.AttributeNameField, value) <> true) Then + Me.AttributeNameField = value + Me.RaisePropertyChanged("AttributeName") + End If + End Set + End Property + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + + _ + Public Property User() As EDMIServiceReference.UserState + Get + Return Me.UserField + End Get + Set + If (Object.ReferenceEquals(Me.UserField, value) <> true) Then + Me.UserField = value + Me.RaisePropertyChanged("User") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class GetFileObjectRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private LoadFileContentsField As Boolean + + _ + Private ObjectIdField As Long + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property LoadFileContents() As Boolean + Get + Return Me.LoadFileContentsField + End Get + Set + If (Me.LoadFileContentsField.Equals(value) <> true) Then + Me.LoadFileContentsField = value + Me.RaisePropertyChanged("LoadFileContents") + End If + End Set + End Property + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class FileObject + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + Private _AccessRightsField As String + + Private _FileContentsField() As Byte + + Private _FileExtensionField As String + + Private _FileHashField As String + + Private _FilePathField As String + + Private _FileSizeField As Long + + Private _ObjectIdField As Long + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property _AccessRights() As String + Get + Return Me._AccessRightsField + End Get + Set + If (Object.ReferenceEquals(Me._AccessRightsField, value) <> true) Then + Me._AccessRightsField = value + Me.RaisePropertyChanged("_AccessRights") + End If + End Set + End Property + + _ + Public Property _FileContents() As Byte() + Get + Return Me._FileContentsField + End Get + Set + If (Object.ReferenceEquals(Me._FileContentsField, value) <> true) Then + Me._FileContentsField = value + Me.RaisePropertyChanged("_FileContents") + End If + End Set + End Property + + _ + Public Property _FileExtension() As String + Get + Return Me._FileExtensionField + End Get + Set + If (Object.ReferenceEquals(Me._FileExtensionField, value) <> true) Then + Me._FileExtensionField = value + Me.RaisePropertyChanged("_FileExtension") + End If + End Set + End Property + + _ + Public Property _FileHash() As String + Get + Return Me._FileHashField + End Get + Set + If (Object.ReferenceEquals(Me._FileHashField, value) <> true) Then + Me._FileHashField = value + Me.RaisePropertyChanged("_FileHash") + End If + End Set + End Property + + _ + Public Property _FilePath() As String + Get + Return Me._FilePathField + End Get + Set + If (Object.ReferenceEquals(Me._FilePathField, value) <> true) Then + Me._FilePathField = value + Me.RaisePropertyChanged("_FilePath") + End If + End Set + End Property + + _ + Public Property _FileSize() As Long + Get + Return Me._FileSizeField + End Get + Set + If (Me._FileSizeField.Equals(value) <> true) Then + Me._FileSizeField = value + Me.RaisePropertyChanged("_FileSize") + End If + End Set + End Property + + _ + Public Property _ObjectId() As Long + Get + Return Me._ObjectIdField + End Get + Set + If (Me._ObjectIdField.Equals(value) <> true) Then + Me._ObjectIdField = value + Me.RaisePropertyChanged("_ObjectId") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class CheckInOutFileRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private ActionField As EDMIServiceReference.CheckInOutFileAction + + _ + Private CommentField As String + + _ + Private ObjectIdField As Long + + _ + Private UserField As EDMIServiceReference.UserState + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property Action() As EDMIServiceReference.CheckInOutFileAction + Get + Return Me.ActionField + End Get + Set + If (Me.ActionField.Equals(value) <> true) Then + Me.ActionField = value + Me.RaisePropertyChanged("Action") + End If + End Set + End Property + + _ + Public Property Comment() As String + Get + Return Me.CommentField + End Get + Set + If (Object.ReferenceEquals(Me.CommentField, value) <> true) Then + Me.CommentField = value + Me.RaisePropertyChanged("Comment") + End If + End Set + End Property + + _ + Public Property ObjectId() As Long + Get + Return Me.ObjectIdField + End Get + Set + If (Me.ObjectIdField.Equals(value) <> true) Then + Me.ObjectIdField = value + Me.RaisePropertyChanged("ObjectId") + End If + End Set + End Property + + _ + Public Property User() As EDMIServiceReference.UserState + Get + Return Me.UserField + End Get + Set + If (Object.ReferenceEquals(Me.UserField, value) <> true) Then + Me.UserField = value + Me.RaisePropertyChanged("User") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Public Enum CheckInOutFileAction As Integer + + _ + CheckIn = 0 + + _ + CheckOut = 1 + End Enum + + _ + Partial Public Class ImportFileRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private AttributeValuesField() As EDMIServiceReference.UserAttributeValue + + _ + Private FileField As EDMIServiceReference.FileProperties + + _ + Private IDBDoctypeIdField As Long + + _ + Private KindTypeField As String + + _ + Private ProfileIdField As Integer + + _ + Private StoreNameField As String + + _ + Private UserField As EDMIServiceReference.UserState + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property AttributeValues() As EDMIServiceReference.UserAttributeValue() + Get + Return Me.AttributeValuesField + End Get + Set + If (Object.ReferenceEquals(Me.AttributeValuesField, value) <> true) Then + Me.AttributeValuesField = value + Me.RaisePropertyChanged("AttributeValues") + End If + End Set + End Property + + _ + Public Property File() As EDMIServiceReference.FileProperties + Get + Return Me.FileField + End Get + Set + If (Object.ReferenceEquals(Me.FileField, value) <> true) Then + Me.FileField = value + Me.RaisePropertyChanged("File") + End If + End Set + End Property + + _ + Public Property IDBDoctypeId() As Long + Get + Return Me.IDBDoctypeIdField + End Get + Set + If (Me.IDBDoctypeIdField.Equals(value) <> true) Then + Me.IDBDoctypeIdField = value + Me.RaisePropertyChanged("IDBDoctypeId") + End If + End Set + End Property + + _ + Public Property KindType() As String + Get + Return Me.KindTypeField + End Get + Set + If (Object.ReferenceEquals(Me.KindTypeField, value) <> true) Then + Me.KindTypeField = value + Me.RaisePropertyChanged("KindType") + End If + End Set + End Property + + _ + Public Property ProfileId() As Integer + Get + Return Me.ProfileIdField + End Get + Set + If (Me.ProfileIdField.Equals(value) <> true) Then + Me.ProfileIdField = value + Me.RaisePropertyChanged("ProfileId") + End If + End Set + End Property + + _ + Public Property StoreName() As String + Get + Return Me.StoreNameField + End Get + Set + If (Object.ReferenceEquals(Me.StoreNameField, value) <> true) Then + Me.StoreNameField = value + Me.RaisePropertyChanged("StoreName") + End If + End Set + End Property + + _ + Public Property User() As EDMIServiceReference.UserState + Get + Return Me.UserField + End Get + Set + If (Object.ReferenceEquals(Me.UserField, value) <> true) Then + Me.UserField = value + Me.RaisePropertyChanged("User") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Partial Public Class Globix_ImportFileRequest + Inherits Object + Implements System.Runtime.Serialization.IExtensibleDataObject, System.ComponentModel.INotifyPropertyChanged + + _ + Private extensionDataField As System.Runtime.Serialization.ExtensionDataObject + + _ + Private AttributeValuesField() As EDMIServiceReference.UserAttributeValue + + _ + Private FileField As EDMIServiceReference.FileProperties + + _ + Private IDBDoctypeIdField As Long + + _ + Private KindTypeField As String + + _ + Private ProfileIdField As Integer + + _ + Private StoreNameField As String + + _ + Private UserField As EDMIServiceReference.UserState + + _ + Public Property ExtensionData() As System.Runtime.Serialization.ExtensionDataObject Implements System.Runtime.Serialization.IExtensibleDataObject.ExtensionData + Get + Return Me.extensionDataField + End Get + Set + Me.extensionDataField = value + End Set + End Property + + _ + Public Property AttributeValues() As EDMIServiceReference.UserAttributeValue() + Get + Return Me.AttributeValuesField + End Get + Set + If (Object.ReferenceEquals(Me.AttributeValuesField, value) <> true) Then + Me.AttributeValuesField = value + Me.RaisePropertyChanged("AttributeValues") + End If + End Set + End Property + + _ + Public Property File() As EDMIServiceReference.FileProperties + Get + Return Me.FileField + End Get + Set + If (Object.ReferenceEquals(Me.FileField, value) <> true) Then + Me.FileField = value + Me.RaisePropertyChanged("File") + End If + End Set + End Property + + _ + Public Property IDBDoctypeId() As Long + Get + Return Me.IDBDoctypeIdField + End Get + Set + If (Me.IDBDoctypeIdField.Equals(value) <> true) Then + Me.IDBDoctypeIdField = value + Me.RaisePropertyChanged("IDBDoctypeId") + End If + End Set + End Property + + _ + Public Property KindType() As String + Get + Return Me.KindTypeField + End Get + Set + If (Object.ReferenceEquals(Me.KindTypeField, value) <> true) Then + Me.KindTypeField = value + Me.RaisePropertyChanged("KindType") + End If + End Set + End Property + + _ + Public Property ProfileId() As Integer + Get + Return Me.ProfileIdField + End Get + Set + If (Me.ProfileIdField.Equals(value) <> true) Then + Me.ProfileIdField = value + Me.RaisePropertyChanged("ProfileId") + End If + End Set + End Property + + _ + Public Property StoreName() As String + Get + Return Me.StoreNameField + End Get + Set + If (Object.ReferenceEquals(Me.StoreNameField, value) <> true) Then + Me.StoreNameField = value + Me.RaisePropertyChanged("StoreName") + End If + End Set + End Property + + _ + Public Property User() As EDMIServiceReference.UserState + Get + Return Me.UserField + End Get + Set + If (Object.ReferenceEquals(Me.UserField, value) <> true) Then + Me.UserField = value + Me.RaisePropertyChanged("User") + End If + End Set + End Property + + Public Event PropertyChanged As System.ComponentModel.PropertyChangedEventHandler Implements System.ComponentModel.INotifyPropertyChanged.PropertyChanged + + Protected Sub RaisePropertyChanged(ByVal propertyName As String) + Dim propertyChanged As System.ComponentModel.PropertyChangedEventHandler = Me.PropertyChangedEvent + If (Not (propertyChanged) Is Nothing) Then + propertyChanged(Me, New System.ComponentModel.PropertyChangedEventArgs(propertyName)) + End If + End Sub + End Class + + _ + Public Enum RightsAccessRight As Integer + + _ + VIEW_ONLY = 1 + + _ + VIEW_EXPORT = 2 + + _ + FULL = 4 + End Enum + + _ + Public Interface IEDMIService + + _ + Function Heartbeat() As Boolean + + _ + Function HeartbeatAsync() As System.Threading.Tasks.Task(Of Boolean) + + _ + Function GetClientConfig() As EDMIServiceReference.GetClientConfigResponse + + _ + Function GetClientConfigAsync() As System.Threading.Tasks.Task(Of EDMIServiceReference.GetClientConfigResponse) + + _ + Function GetCachedTables() As String() + + _ + Function GetCachedTablesAsync() As System.Threading.Tasks.Task(Of String()) + + _ + Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult + + _ + Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) + + _ + Function ReturnDatatable(ByVal pData As EDMIServiceReference.GetDatatableRequest) As EDMIServiceReference.GetDatatableResponse + + _ + Function ReturnDatatableAsync(ByVal pData As EDMIServiceReference.GetDatatableRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetDatatableResponse) + + _ + Function ReturnScalarValue(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As EDMIServiceReference.GetScalarValueResponse + + _ + Function ReturnScalarValueAsync(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetScalarValueResponse) + + _ + Function ExecuteNonQuery(ByVal pData As EDMIServiceReference.ExecuteNonQueryRequest) As EDMIServiceReference.ExecuteNonQueryResponse + + _ + Function ExecuteNonQueryAsync(ByVal pData As EDMIServiceReference.ExecuteNonQueryRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ExecuteNonQueryResponse) + + _ + Function ReturnDatatable_Firebird(ByVal SQL As String) As EDMIServiceReference.TableResult + + _ + Function ReturnDatatable_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) + + _ + Function ReturnScalar_Firebird(ByVal SQL As String) As EDMIServiceReference.ScalarResult + + _ + Function ReturnScalar_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) + + _ + Function ExecuteNonQuery_Firebird(ByVal SQL As String) As EDMIServiceReference.NonQueryResult + + _ + Function ExecuteNonQuery_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) + + _ + Function ReturnDatatable_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.TableResult + + _ + Function ReturnDatatable_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) + + _ + Function ReturnScalar_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.ScalarResult + + _ + Function ReturnScalar_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) + + _ + Function ExecuteNonQuery_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.NonQueryResult + + _ + Function ExecuteNonQuery_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) + + _ + Function ReturnDatatable_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.TableResult + + _ + Function ReturnDatatable_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) + + _ + Function ReturnScalar_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.ScalarResult + + _ + Function ReturnScalar_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) + + _ + Function ExecuteNonQuery_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.NonQueryResult + + _ + Function ExecuteNonQuery_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) + + _ + Function NewFile(ByVal Data As EDMIServiceReference.NewFileRequest) As EDMIServiceReference.NewFileResponse + + _ + Function NewFileAsync(ByVal Data As EDMIServiceReference.NewFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.NewFileResponse) + + _ + Function UpdateFile(ByVal Data As EDMIServiceReference.UpdateFileRequest) As EDMIServiceReference.UpdateFileResponse + + _ + Function UpdateFileAsync(ByVal Data As EDMIServiceReference.UpdateFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.UpdateFileResponse) + + _ + Function SetAttributeValue(ByVal Data As EDMIServiceReference.SetAttributeValueRequest) As EDMIServiceReference.SetAttributeValueResponse + + _ + Function SetAttributeValueAsync(ByVal Data As EDMIServiceReference.SetAttributeValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.SetAttributeValueResponse) + + _ + Function GetAttributeValue(ByVal Data As EDMIServiceReference.GetAttributeValueRequest) As EDMIServiceReference.GetAttributeValueResponse + + _ + Function GetAttributeValueAsync(ByVal Data As EDMIServiceReference.GetAttributeValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetAttributeValueResponse) + + _ + Function GetFileObject(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As EDMIServiceReference.GetFileObjectResponse + + _ + Function GetFileObjectAsync(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetFileObjectResponse) + + _ + Function CheckInOutFile(ByVal Data As EDMIServiceReference.CheckInOutFileRequest) As EDMIServiceReference.CheckInOutFileResponse + + _ + Function CheckInOutFileAsync(ByVal Data As EDMIServiceReference.CheckInOutFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.CheckInOutFileResponse) + + _ + Function ImportFile(ByVal Data As EDMIServiceReference.ImportFileRequest) As EDMIServiceReference.ImportFileResponse + + _ + Function ImportFileAsync(ByVal Data As EDMIServiceReference.ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ImportFileResponse) + + _ + Function Globix_ImportFile(ByVal Data As EDMIServiceReference.Globix_ImportFileRequest) As EDMIServiceReference.Globix_ImportFileResponse + + _ + Function Globix_ImportFileAsync(ByVal Data As EDMIServiceReference.Globix_ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.Globix_ImportFileResponse) + + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Wrappername (DocumentStreamRequest) von Nachricht "DocumentStreamRequest" nicht mit dem Standardwert (GetFileByObjectId) übereinstimmt. + _ + Function GetFileByObjectId(ByVal request As EDMIServiceReference.DocumentStreamRequest) As EDMIServiceReference.DocumentStreamResponse + + _ + Function GetFileByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentStreamRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentStreamResponse) + + _ + Function GetFileInfoByObjectId(ByVal request As EDMIServiceReference.DocumentInfoRequest) As EDMIServiceReference.DocumentInfoResponse + + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang mehrere Rückgabewerte aufweist. + _ + Function GetFileInfoByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentInfoRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentInfoResponse) + + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang ListFilesForUser weder in RPC noch in einem Dokument eingeschlossen ist. + _ + Function ListFilesForUser(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As EDMIServiceReference.DocumentListResponse + + _ + Function ListFilesForUserAsync(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentListResponse) + + _ + Function TestObjectIdExists(ByVal request As EDMIServiceReference.TestObjectIdExistsRequest) As EDMIServiceReference.TestObjectIdExistsResponse + + 'CODEGEN: Der Nachrichtenvertrag wird generiert, da der Vorgang mehrere Rückgabewerte aufweist. + _ + Function TestObjectIdExistsAsync(ByVal request As EDMIServiceReference.TestObjectIdExistsRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.TestObjectIdExistsResponse) + End Interface + + _ + Partial Public Class DocumentStreamRequest + + _ + Public ObjectId As Long + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal ObjectId As Long) + MyBase.New + Me.ObjectId = ObjectId + End Sub + End Class + + _ + Partial Public Class DocumentStreamResponse + + _ + Public FileName As String + + _ + Public FileContents As System.IO.Stream + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal FileName As String, ByVal FileContents As System.IO.Stream) + MyBase.New + Me.FileName = FileName + Me.FileContents = FileContents + End Sub + End Class + + _ + Partial Public Class DocumentInfoRequest + + _ + Public ObjectId As Long + + _ + Public UserId As Long + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal ObjectId As Long, ByVal UserId As Long) + MyBase.New + Me.ObjectId = ObjectId + Me.UserId = UserId + End Sub + End Class + + _ + Partial Public Class DocumentInfoResponse + + _ + Public FileRight As EDMIServiceReference.RightsAccessRight + + _ + Public FullPath As String + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal FileRight As EDMIServiceReference.RightsAccessRight, ByVal FullPath As String) + MyBase.New + Me.FileRight = FileRight + Me.FullPath = FullPath + End Sub + End Class + + _ + Partial Public Class ListFilesForUserRequest + + Public Sub New() + MyBase.New + End Sub + End Class + + _ + Partial Public Class DocumentListResponse + + _ + Public Datatable As System.Data.DataTable + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal Datatable As System.Data.DataTable) + MyBase.New + Me.Datatable = Datatable + End Sub + End Class + + _ + Partial Public Class TestObjectIdExistsRequest + + _ + Public ObjectId As Long + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal ObjectId As Long) + MyBase.New + Me.ObjectId = ObjectId + End Sub + End Class + + _ + Partial Public Class TestObjectIdExistsResponse + + _ + Public Deleted As Boolean + + _ + Public Exists As Boolean + + _ + Public Inactive As Boolean + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal Deleted As Boolean, ByVal Exists As Boolean, ByVal Inactive As Boolean) + MyBase.New + Me.Deleted = Deleted + Me.Exists = Exists + Me.Inactive = Inactive + End Sub + End Class + + _ + Public Interface IEDMIServiceChannel + Inherits EDMIServiceReference.IEDMIService, System.ServiceModel.IClientChannel + End Interface + + _ + Partial Public Class EDMIServiceClient + Inherits System.ServiceModel.ClientBase(Of EDMIServiceReference.IEDMIService) + Implements EDMIServiceReference.IEDMIService + + Public Sub New() + MyBase.New + End Sub + + Public Sub New(ByVal endpointConfigurationName As String) + MyBase.New(endpointConfigurationName) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As String) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal endpointConfigurationName As String, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(endpointConfigurationName, remoteAddress) + End Sub + + Public Sub New(ByVal binding As System.ServiceModel.Channels.Binding, ByVal remoteAddress As System.ServiceModel.EndpointAddress) + MyBase.New(binding, remoteAddress) + End Sub + + Public Function Heartbeat() As Boolean Implements EDMIServiceReference.IEDMIService.Heartbeat + Return MyBase.Channel.Heartbeat + End Function + + Public Function HeartbeatAsync() As System.Threading.Tasks.Task(Of Boolean) Implements EDMIServiceReference.IEDMIService.HeartbeatAsync + Return MyBase.Channel.HeartbeatAsync + End Function + + Public Function GetClientConfig() As EDMIServiceReference.GetClientConfigResponse Implements EDMIServiceReference.IEDMIService.GetClientConfig + Return MyBase.Channel.GetClientConfig + End Function + + Public Function GetClientConfigAsync() As System.Threading.Tasks.Task(Of EDMIServiceReference.GetClientConfigResponse) Implements EDMIServiceReference.IEDMIService.GetClientConfigAsync + Return MyBase.Channel.GetClientConfigAsync + End Function + + Public Function GetCachedTables() As String() Implements EDMIServiceReference.IEDMIService.GetCachedTables + Return MyBase.Channel.GetCachedTables + End Function + + Public Function GetCachedTablesAsync() As System.Threading.Tasks.Task(Of String()) Implements EDMIServiceReference.IEDMIService.GetCachedTablesAsync + Return MyBase.Channel.GetCachedTablesAsync + End Function + + Public Function ReturnDatatableFromCache(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCache + Return MyBase.Channel.ReturnDatatableFromCache(Name, FilterExpression, SortByColumn) + End Function + + Public Function ReturnDatatableFromCacheAsync(ByVal Name As String, ByVal FilterExpression As String, ByVal SortByColumn As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatableFromCacheAsync + Return MyBase.Channel.ReturnDatatableFromCacheAsync(Name, FilterExpression, SortByColumn) + End Function + + Public Function ReturnDatatable(ByVal pData As EDMIServiceReference.GetDatatableRequest) As EDMIServiceReference.GetDatatableResponse Implements EDMIServiceReference.IEDMIService.ReturnDatatable + Return MyBase.Channel.ReturnDatatable(pData) + End Function + + Public Function ReturnDatatableAsync(ByVal pData As EDMIServiceReference.GetDatatableRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetDatatableResponse) Implements EDMIServiceReference.IEDMIService.ReturnDatatableAsync + Return MyBase.Channel.ReturnDatatableAsync(pData) + End Function + + Public Function ReturnScalarValue(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As EDMIServiceReference.GetScalarValueResponse Implements EDMIServiceReference.IEDMIService.ReturnScalarValue + Return MyBase.Channel.ReturnScalarValue(pData) + End Function + + Public Function ReturnScalarValueAsync(ByVal pData As EDMIServiceReference.GetScalarValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetScalarValueResponse) Implements EDMIServiceReference.IEDMIService.ReturnScalarValueAsync + Return MyBase.Channel.ReturnScalarValueAsync(pData) + End Function + + Public Function ExecuteNonQuery(ByVal pData As EDMIServiceReference.ExecuteNonQueryRequest) As EDMIServiceReference.ExecuteNonQueryResponse Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery + Return MyBase.Channel.ExecuteNonQuery(pData) + End Function + + Public Function ExecuteNonQueryAsync(ByVal pData As EDMIServiceReference.ExecuteNonQueryRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ExecuteNonQueryResponse) Implements EDMIServiceReference.IEDMIService.ExecuteNonQueryAsync + Return MyBase.Channel.ExecuteNonQueryAsync(pData) + End Function + + Public Function ReturnDatatable_Firebird(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_Firebird + Return MyBase.Channel.ReturnDatatable_Firebird(SQL) + End Function + + Public Function ReturnDatatable_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatable_FirebirdAsync + Return MyBase.Channel.ReturnDatatable_FirebirdAsync(SQL) + End Function + + Public Function ReturnScalar_Firebird(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMIService.ReturnScalar_Firebird + Return MyBase.Channel.ReturnScalar_Firebird(SQL) + End Function + + Public Function ReturnScalar_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMIService.ReturnScalar_FirebirdAsync + Return MyBase.Channel.ReturnScalar_FirebirdAsync(SQL) + End Function + + Public Function ExecuteNonQuery_Firebird(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_Firebird + Return MyBase.Channel.ExecuteNonQuery_Firebird(SQL) + End Function + + Public Function ExecuteNonQuery_FirebirdAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_FirebirdAsync + Return MyBase.Channel.ExecuteNonQuery_FirebirdAsync(SQL) + End Function + + Public Function ReturnDatatable_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_IDB + Return MyBase.Channel.ReturnDatatable_MSSQL_IDB(SQL) + End Function + + Public Function ReturnDatatable_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_IDBAsync + Return MyBase.Channel.ReturnDatatable_MSSQL_IDBAsync(SQL) + End Function + + Public Function ReturnScalar_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_IDB + Return MyBase.Channel.ReturnScalar_MSSQL_IDB(SQL) + End Function + + Public Function ReturnScalar_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_IDBAsync + Return MyBase.Channel.ReturnScalar_MSSQL_IDBAsync(SQL) + End Function + + Public Function ExecuteNonQuery_MSSQL_IDB(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_IDB + Return MyBase.Channel.ExecuteNonQuery_MSSQL_IDB(SQL) + End Function + + Public Function ExecuteNonQuery_MSSQL_IDBAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_IDBAsync + Return MyBase.Channel.ExecuteNonQuery_MSSQL_IDBAsync(SQL) + End Function + + Public Function ReturnDatatable_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.TableResult Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_ECM + Return MyBase.Channel.ReturnDatatable_MSSQL_ECM(SQL) + End Function + + Public Function ReturnDatatable_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.TableResult) Implements EDMIServiceReference.IEDMIService.ReturnDatatable_MSSQL_ECMAsync + Return MyBase.Channel.ReturnDatatable_MSSQL_ECMAsync(SQL) + End Function + + Public Function ReturnScalar_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.ScalarResult Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_ECM + Return MyBase.Channel.ReturnScalar_MSSQL_ECM(SQL) + End Function + + Public Function ReturnScalar_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.ScalarResult) Implements EDMIServiceReference.IEDMIService.ReturnScalar_MSSQL_ECMAsync + Return MyBase.Channel.ReturnScalar_MSSQL_ECMAsync(SQL) + End Function + + Public Function ExecuteNonQuery_MSSQL_ECM(ByVal SQL As String) As EDMIServiceReference.NonQueryResult Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_ECM + Return MyBase.Channel.ExecuteNonQuery_MSSQL_ECM(SQL) + End Function + + Public Function ExecuteNonQuery_MSSQL_ECMAsync(ByVal SQL As String) As System.Threading.Tasks.Task(Of EDMIServiceReference.NonQueryResult) Implements EDMIServiceReference.IEDMIService.ExecuteNonQuery_MSSQL_ECMAsync + Return MyBase.Channel.ExecuteNonQuery_MSSQL_ECMAsync(SQL) + End Function + + Public Function NewFile(ByVal Data As EDMIServiceReference.NewFileRequest) As EDMIServiceReference.NewFileResponse Implements EDMIServiceReference.IEDMIService.NewFile + Return MyBase.Channel.NewFile(Data) + End Function + + Public Function NewFileAsync(ByVal Data As EDMIServiceReference.NewFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.NewFileResponse) Implements EDMIServiceReference.IEDMIService.NewFileAsync + Return MyBase.Channel.NewFileAsync(Data) + End Function + + Public Function UpdateFile(ByVal Data As EDMIServiceReference.UpdateFileRequest) As EDMIServiceReference.UpdateFileResponse Implements EDMIServiceReference.IEDMIService.UpdateFile + Return MyBase.Channel.UpdateFile(Data) + End Function + + Public Function UpdateFileAsync(ByVal Data As EDMIServiceReference.UpdateFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.UpdateFileResponse) Implements EDMIServiceReference.IEDMIService.UpdateFileAsync + Return MyBase.Channel.UpdateFileAsync(Data) + End Function + + Public Function SetAttributeValue(ByVal Data As EDMIServiceReference.SetAttributeValueRequest) As EDMIServiceReference.SetAttributeValueResponse Implements EDMIServiceReference.IEDMIService.SetAttributeValue + Return MyBase.Channel.SetAttributeValue(Data) + End Function + + Public Function SetAttributeValueAsync(ByVal Data As EDMIServiceReference.SetAttributeValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.SetAttributeValueResponse) Implements EDMIServiceReference.IEDMIService.SetAttributeValueAsync + Return MyBase.Channel.SetAttributeValueAsync(Data) + End Function + + Public Function GetAttributeValue(ByVal Data As EDMIServiceReference.GetAttributeValueRequest) As EDMIServiceReference.GetAttributeValueResponse Implements EDMIServiceReference.IEDMIService.GetAttributeValue + Return MyBase.Channel.GetAttributeValue(Data) + End Function + + Public Function GetAttributeValueAsync(ByVal Data As EDMIServiceReference.GetAttributeValueRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetAttributeValueResponse) Implements EDMIServiceReference.IEDMIService.GetAttributeValueAsync + Return MyBase.Channel.GetAttributeValueAsync(Data) + End Function + + Public Function GetFileObject(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As EDMIServiceReference.GetFileObjectResponse Implements EDMIServiceReference.IEDMIService.GetFileObject + Return MyBase.Channel.GetFileObject(Data) + End Function + + Public Function GetFileObjectAsync(ByVal Data As EDMIServiceReference.GetFileObjectRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.GetFileObjectResponse) Implements EDMIServiceReference.IEDMIService.GetFileObjectAsync + Return MyBase.Channel.GetFileObjectAsync(Data) + End Function + + Public Function CheckInOutFile(ByVal Data As EDMIServiceReference.CheckInOutFileRequest) As EDMIServiceReference.CheckInOutFileResponse Implements EDMIServiceReference.IEDMIService.CheckInOutFile + Return MyBase.Channel.CheckInOutFile(Data) + End Function + + Public Function CheckInOutFileAsync(ByVal Data As EDMIServiceReference.CheckInOutFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.CheckInOutFileResponse) Implements EDMIServiceReference.IEDMIService.CheckInOutFileAsync + Return MyBase.Channel.CheckInOutFileAsync(Data) + End Function + + Public Function ImportFile(ByVal Data As EDMIServiceReference.ImportFileRequest) As EDMIServiceReference.ImportFileResponse Implements EDMIServiceReference.IEDMIService.ImportFile + Return MyBase.Channel.ImportFile(Data) + End Function + + Public Function ImportFileAsync(ByVal Data As EDMIServiceReference.ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.ImportFileResponse) Implements EDMIServiceReference.IEDMIService.ImportFileAsync + Return MyBase.Channel.ImportFileAsync(Data) + End Function + + Public Function Globix_ImportFile(ByVal Data As EDMIServiceReference.Globix_ImportFileRequest) As EDMIServiceReference.Globix_ImportFileResponse Implements EDMIServiceReference.IEDMIService.Globix_ImportFile + Return MyBase.Channel.Globix_ImportFile(Data) + End Function + + Public Function Globix_ImportFileAsync(ByVal Data As EDMIServiceReference.Globix_ImportFileRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.Globix_ImportFileResponse) Implements EDMIServiceReference.IEDMIService.Globix_ImportFileAsync + Return MyBase.Channel.Globix_ImportFileAsync(Data) + End Function + + _ + Function EDMIServiceReference_IEDMIService_GetFileByObjectId(ByVal request As EDMIServiceReference.DocumentStreamRequest) As EDMIServiceReference.DocumentStreamResponse Implements EDMIServiceReference.IEDMIService.GetFileByObjectId + Return MyBase.Channel.GetFileByObjectId(request) + End Function + + Public Function GetFileByObjectId(ByVal ObjectId As Long, ByRef FileContents As System.IO.Stream) As String + Dim inValue As EDMIServiceReference.DocumentStreamRequest = New EDMIServiceReference.DocumentStreamRequest() + inValue.ObjectId = ObjectId + Dim retVal As EDMIServiceReference.DocumentStreamResponse = CType(Me,EDMIServiceReference.IEDMIService).GetFileByObjectId(inValue) + FileContents = retVal.FileContents + Return retVal.FileName + End Function + + _ + Function EDMIServiceReference_IEDMIService_GetFileByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentStreamRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentStreamResponse) Implements EDMIServiceReference.IEDMIService.GetFileByObjectIdAsync + Return MyBase.Channel.GetFileByObjectIdAsync(request) + End Function + + Public Function GetFileByObjectIdAsync(ByVal ObjectId As Long) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentStreamResponse) + Dim inValue As EDMIServiceReference.DocumentStreamRequest = New EDMIServiceReference.DocumentStreamRequest() + inValue.ObjectId = ObjectId + Return CType(Me,EDMIServiceReference.IEDMIService).GetFileByObjectIdAsync(inValue) + End Function + + _ + Function EDMIServiceReference_IEDMIService_GetFileInfoByObjectId(ByVal request As EDMIServiceReference.DocumentInfoRequest) As EDMIServiceReference.DocumentInfoResponse Implements EDMIServiceReference.IEDMIService.GetFileInfoByObjectId + Return MyBase.Channel.GetFileInfoByObjectId(request) + End Function + + Public Function GetFileInfoByObjectId(ByVal ObjectId As Long, ByVal UserId As Long, ByRef FullPath As String) As EDMIServiceReference.RightsAccessRight + Dim inValue As EDMIServiceReference.DocumentInfoRequest = New EDMIServiceReference.DocumentInfoRequest() + inValue.ObjectId = ObjectId + inValue.UserId = UserId + Dim retVal As EDMIServiceReference.DocumentInfoResponse = CType(Me,EDMIServiceReference.IEDMIService).GetFileInfoByObjectId(inValue) + FullPath = retVal.FullPath + Return retVal.FileRight + End Function + + Public Function GetFileInfoByObjectIdAsync(ByVal request As EDMIServiceReference.DocumentInfoRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentInfoResponse) Implements EDMIServiceReference.IEDMIService.GetFileInfoByObjectIdAsync + Return MyBase.Channel.GetFileInfoByObjectIdAsync(request) + End Function + + _ + Function EDMIServiceReference_IEDMIService_ListFilesForUser(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As EDMIServiceReference.DocumentListResponse Implements EDMIServiceReference.IEDMIService.ListFilesForUser + Return MyBase.Channel.ListFilesForUser(request) + End Function + + Public Function ListFilesForUser() As System.Data.DataTable + Dim inValue As EDMIServiceReference.ListFilesForUserRequest = New EDMIServiceReference.ListFilesForUserRequest() + Dim retVal As EDMIServiceReference.DocumentListResponse = CType(Me,EDMIServiceReference.IEDMIService).ListFilesForUser(inValue) + Return retVal.Datatable + End Function + + _ + Function EDMIServiceReference_IEDMIService_ListFilesForUserAsync(ByVal request As EDMIServiceReference.ListFilesForUserRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentListResponse) Implements EDMIServiceReference.IEDMIService.ListFilesForUserAsync + Return MyBase.Channel.ListFilesForUserAsync(request) + End Function + + Public Function ListFilesForUserAsync() As System.Threading.Tasks.Task(Of EDMIServiceReference.DocumentListResponse) + Dim inValue As EDMIServiceReference.ListFilesForUserRequest = New EDMIServiceReference.ListFilesForUserRequest() + Return CType(Me,EDMIServiceReference.IEDMIService).ListFilesForUserAsync(inValue) + End Function + + _ + Function EDMIServiceReference_IEDMIService_TestObjectIdExists(ByVal request As EDMIServiceReference.TestObjectIdExistsRequest) As EDMIServiceReference.TestObjectIdExistsResponse Implements EDMIServiceReference.IEDMIService.TestObjectIdExists + Return MyBase.Channel.TestObjectIdExists(request) + End Function + + Public Function TestObjectIdExists(ByVal ObjectId As Long, ByRef Exists As Boolean, ByRef Inactive As Boolean) As Boolean + Dim inValue As EDMIServiceReference.TestObjectIdExistsRequest = New EDMIServiceReference.TestObjectIdExistsRequest() + inValue.ObjectId = ObjectId + Dim retVal As EDMIServiceReference.TestObjectIdExistsResponse = CType(Me,EDMIServiceReference.IEDMIService).TestObjectIdExists(inValue) + Exists = retVal.Exists + Inactive = retVal.Inactive + Return retVal.Deleted + End Function + + Public Function TestObjectIdExistsAsync(ByVal request As EDMIServiceReference.TestObjectIdExistsRequest) As System.Threading.Tasks.Task(Of EDMIServiceReference.TestObjectIdExistsResponse) Implements EDMIServiceReference.IEDMIService.TestObjectIdExistsAsync + Return MyBase.Channel.TestObjectIdExistsAsync(request) + End Function + End Class +End Namespace