Monorepo/GUIs.ClientSuite/ClassService.vb
2020-04-07 10:54:35 +02:00

103 lines
4.7 KiB
VB.net

Imports System.ServiceModel
Imports System.ServiceModel.Channels
Imports DigitalData.Modules.Logging
Imports DigitalData.Modules.EDMI.API
Imports DigitalData.Modules.EDMI.API.EDMIServiceReference
Imports DigitalData.GUIs.ClientSuite.Base
Imports System.ServiceModel.Security
Public Class ClassService
Inherits BaseClass
Public Enum ConnectionTestResult
Successful
NotFound
EmptyURI
Authentication
Unknown
End Enum
Public Sub New(LogConfig As LogConfig)
MyBase.New(LogConfig)
End Sub
Public Function TestConnection() As ConnectionTestResult
Return TestConnection(My.SysConfig.ServiceConnection)
End Function
Public Function TestConnection(EndpointURL As String) As ConnectionTestResult
Try
Dim oChannelFactory = GetChannelFactory(EndpointURL)
Dim oChannel = oChannelFactory.CreateChannel()
oChannel.OperationTimeout = New TimeSpan(0, 0, ClassConstants.SERVICE_OPEN_TIMEOUT)
oChannel.Open()
oChannel.Close()
Return ConnectionTestResult.Successful
Catch ex As EndpointNotFoundException
Logger.Error(ex)
Return ConnectionTestResult.NotFound
Catch ex As Exception
Logger.Error(ex)
Return ConnectionTestResult.Unknown
End Try
End Function
Public Async Function TestConnectionAsync() As Task(Of ConnectionTestResult)
Return Await TestConnectionAsync(My.SysConfig.ServiceConnection)
End Function
Public Async Function TestConnectionAsync(EndpointURL As String) As Task(Of ConnectionTestResult)
Return Await Task.Factory.StartNew(Function()
Try
Dim oChannelFactory = GetChannelFactory(EndpointURL)
Dim oChannel = oChannelFactory.CreateChannel()
oChannel.OperationTimeout = New TimeSpan(0, 0, ClassConstants.SERVICE_OPEN_TIMEOUT)
oChannel.Open()
oChannel.Close()
Return ConnectionTestResult.Successful
Catch ex As EndpointNotFoundException
Logger.Error(ex)
Return ConnectionTestResult.NotFound
Catch ex As UriFormatException
Logger.Error(ex)
Return ConnectionTestResult.EmptyURI
Catch ex As SecurityNegotiationException
Logger.Error(ex)
Return ConnectionTestResult.Authentication
Catch ex As Exception
Logger.Error(ex)
Return ConnectionTestResult.Unknown
End Try
End Function)
End Function
Public Function GetChannelFactory() As IChannelFactory(Of IEDMIServiceChannel)
Return GetChannelFactory(My.SysConfig.ServiceConnection)
End Function
Public Function GetChannelFactory(EndpointURL As String) As ChannelFactory(Of IEDMIServiceChannel)
Dim oBinding = GetBinding()
Dim oEndpoint = New EndpointAddress(EndpointURL)
Dim oFactory As New ChannelFactory(Of IEDMIServiceChannel)(oBinding, oEndpoint)
Return oFactory
End Function
Private Function GetBinding() As NetTcpBinding
Dim oBinding As New NetTcpBinding()
oBinding.Security.Mode = SecurityMode.Transport
oBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Windows
oBinding.MaxReceivedMessageSize = ClassConstants.SERVICE_MAX_MESSAGE_SIZE
oBinding.MaxBufferSize = ClassConstants.SERVICE_MAX_BUFFER_SIZE
oBinding.MaxBufferPoolSize = ClassConstants.SERVICE_MAX_BUFFER_SIZE
oBinding.MaxConnections = ClassConstants.SERVICE_MAX_CONNECTIONS
oBinding.ReaderQuotas.MaxArrayLength = ClassConstants.SERVICE_MAX_ARRAY_LENGTH
oBinding.ReaderQuotas.MaxStringContentLength = ClassConstants.SERVICE_MAX_STRING_LENGTH
oBinding.OpenTimeout = New TimeSpan(0, 0, ClassConstants.SERVICE_OPEN_TIMEOUT)
Return oBinding
End Function
End Class