103 lines
4.7 KiB
VB.net
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
|