EDMIService: Move service configuration to code
This commit is contained in:
parent
1e5a05832d
commit
b89ca3aa5a
@ -7,8 +7,8 @@ Public Class Channel
|
||||
' https://social.msdn.microsoft.com/Forums/vstudio/en-US/d6e234d3-942f-4e9d-8470-32618d3f3212/maxbufferpoolsize-vs-maxbuffersize?forum=wcf
|
||||
|
||||
Public Const MAX_RECEIVED_MESSAGE_SIZE = 2147483647 ' 1GB
|
||||
Public Const MAX_BUFFER_SIZE = 2147483647 ' 10MB
|
||||
Public Const MAX_BUFFER_POOL_SIZE = 2147483647 ' 40MB
|
||||
Public Const MAX_BUFFER_SIZE = 104857600 ' 100MB
|
||||
Public Const MAX_BUFFER_POOL_SIZE = 1048576 ' 1MB
|
||||
|
||||
Public Const MAX_CONNECTIONS = 500
|
||||
Public Const MAX_ARRAY_LENGTH = 2147483647
|
||||
@ -19,7 +19,6 @@ Public Class Channel
|
||||
.MaxReceivedMessageSize = MAX_RECEIVED_MESSAGE_SIZE,
|
||||
.MaxBufferSize = MAX_BUFFER_SIZE,
|
||||
.MaxBufferPoolSize = MAX_BUFFER_POOL_SIZE,
|
||||
.MaxConnections = MAX_CONNECTIONS,
|
||||
.TransferMode = TransferMode.Streamed,
|
||||
.Security = New NetTcpSecurity() With {
|
||||
.Mode = SecurityMode.Transport,
|
||||
|
||||
@ -25,11 +25,22 @@
|
||||
</diagnostics>
|
||||
<bindings>
|
||||
<netTcpBinding>
|
||||
<binding name="tcpBinding" sendTimeout="00:10:00" transferMode="Streamed" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647">
|
||||
<readerQuotas maxDepth="32" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
|
||||
<binding name="tcpBinding"
|
||||
transferMode="Streamed"
|
||||
sendTimeout="00:10:00"
|
||||
receiveTimeout="00:10:00"
|
||||
maxBufferSize="2147483647"
|
||||
maxBufferPoolSize="2147483647"
|
||||
maxReceivedMessageSize="2147483647">
|
||||
<readerQuotas
|
||||
maxDepth="32"
|
||||
maxStringContentLength="2147483647"
|
||||
maxArrayLength="2147483647"
|
||||
maxBytesPerRead="2147483647"
|
||||
maxNameTableCharCount="2147483647" />
|
||||
<security mode="Transport">
|
||||
<transport clientCredentialType="Windows" />
|
||||
</security>
|
||||
</security>
|
||||
</binding>
|
||||
</netTcpBinding>
|
||||
</bindings>
|
||||
|
||||
@ -1,12 +1,14 @@
|
||||
Imports DigitalData.Modules.Database
|
||||
Imports DigitalData.Modules.Logging
|
||||
Imports DigitalData.Modules.Filesystem
|
||||
Imports DigitalData.Modules.language
|
||||
Imports DigitalData.Modules.Language
|
||||
Imports DigitalData.Modules
|
||||
Imports System.IO
|
||||
Imports System.ServiceModel
|
||||
Imports System.Data.SqlClient
|
||||
Imports DigitalData.Services.EDMIService.Results
|
||||
Imports System.ServiceModel.Description
|
||||
Imports System.ServiceModel.Channels
|
||||
|
||||
<ServiceBehavior(InstanceContextMode:=InstanceContextMode.PerSession)>
|
||||
Public Class EDMIService
|
||||
@ -27,6 +29,18 @@ Public Class EDMIService
|
||||
Private ReadOnly _debug As Boolean = False
|
||||
Private ReadOnly _username As String
|
||||
|
||||
Public Shared Sub Configure(Config As ServiceConfiguration)
|
||||
Dim oBaseAddress = Config.BaseAddresses.Item(0)
|
||||
Dim oBinding = EDMI.API.Channel.GetBinding()
|
||||
Dim oAddress = New EndpointAddress(oBaseAddress)
|
||||
' See: https://stackoverflow.com/questions/42327988/addserviceendpoint-throws-key-is-null
|
||||
Dim oDescription = ContractDescription.GetContract(GetType(IEDMIService), GetType(EDMIService))
|
||||
Dim oEndpoint As New ServiceEndpoint(oDescription, oBinding, oAddress)
|
||||
|
||||
Config.AddServiceEndpoint(oEndpoint)
|
||||
Config.Description.Behaviors.Add(New ServiceDebugBehavior With {.IncludeExceptionDetailInFaults = True})
|
||||
End Sub
|
||||
|
||||
Public Sub New()
|
||||
Dim oOperationContext As OperationContext = OperationContext.Current
|
||||
Dim oInstanceContext As InstanceContext = oOperationContext.InstanceContext
|
||||
|
||||
@ -134,6 +134,7 @@
|
||||
<Compile Include="Scheduler.vb" />
|
||||
<Compile Include="Scheduler\DatatableJob.vb" />
|
||||
<Compile Include="Scheduler\JobListener.vb" />
|
||||
<Compile Include="ServiceHost.vb" />
|
||||
<Compile Include="WindowsService.vb">
|
||||
<SubType>Component</SubType>
|
||||
</Compile>
|
||||
|
||||
65
Service.EDMIService/ServiceHost.vb
Normal file
65
Service.EDMIService/ServiceHost.vb
Normal file
@ -0,0 +1,65 @@
|
||||
Imports System.ServiceModel
|
||||
Imports System.ServiceModel.Channels
|
||||
Imports System.ServiceModel.Description
|
||||
|
||||
Public Class ServiceHost(Of T)
|
||||
Inherits ServiceHost
|
||||
|
||||
Public Sub New(baseAddresses As Uri())
|
||||
MyBase.New(GetType(T), baseAddresses)
|
||||
End Sub
|
||||
|
||||
Public Sub EnableMetadataExchange(ByVal Optional EnableHttpGet As Boolean = True)
|
||||
If State = CommunicationState.Opened Then
|
||||
Throw New InvalidOperationException("Host is already opened")
|
||||
End If
|
||||
|
||||
Dim oMetadataBehavior As ServiceMetadataBehavior = Description.Behaviors.Find(Of ServiceMetadataBehavior)()
|
||||
|
||||
If oMetadataBehavior Is Nothing Then
|
||||
oMetadataBehavior = New ServiceMetadataBehavior()
|
||||
Description.Behaviors.Add(oMetadataBehavior)
|
||||
|
||||
If BaseAddresses.Any(Function(uri) uri.Scheme = "http") Then
|
||||
oMetadataBehavior.HttpGetEnabled = EnableHttpGet
|
||||
Else
|
||||
oMetadataBehavior.HttpGetEnabled = False
|
||||
End If
|
||||
End If
|
||||
|
||||
AddAllMexEndPoints()
|
||||
End Sub
|
||||
|
||||
Public ReadOnly Property HasMexEndpoint As Boolean
|
||||
Get
|
||||
Return Description.Endpoints.Any(Function(endpoint) endpoint.Contract.ContractType = GetType(IMetadataExchange))
|
||||
End Get
|
||||
End Property
|
||||
|
||||
Public Sub AddAllMexEndPoints()
|
||||
Debug.Assert(HasMexEndpoint = False)
|
||||
|
||||
For Each baseAddress As Uri In BaseAddresses
|
||||
Dim oBinding As Binding = Nothing
|
||||
|
||||
Select Case baseAddress.Scheme
|
||||
Case "net.tcp"
|
||||
oBinding = MetadataExchangeBindings.CreateMexTcpBinding()
|
||||
Exit Select
|
||||
Case "net.pipe"
|
||||
oBinding = MetadataExchangeBindings.CreateMexNamedPipeBinding()
|
||||
Exit Select
|
||||
Case "http"
|
||||
oBinding = MetadataExchangeBindings.CreateMexHttpBinding()
|
||||
Exit Select
|
||||
Case "https"
|
||||
oBinding = MetadataExchangeBindings.CreateMexHttpsBinding()
|
||||
Exit Select
|
||||
End Select
|
||||
|
||||
If oBinding IsNot Nothing Then
|
||||
AddServiceEndpoint(GetType(IMetadataExchange), oBinding, "mex")
|
||||
End If
|
||||
Next
|
||||
End Sub
|
||||
End Class
|
||||
@ -5,11 +5,12 @@ Imports DigitalData.Modules.Database
|
||||
Imports DigitalData.Modules
|
||||
Imports System.ServiceModel.Description
|
||||
Imports DigitalData.Modules.Config
|
||||
Imports System.ServiceModel.Channels
|
||||
|
||||
Public Class WindowsService
|
||||
Inherits ServiceBase
|
||||
|
||||
Private _ServiceHost As ServiceHost
|
||||
Private _ServiceHost As ServiceHost(Of EDMIService)
|
||||
Private _LogConfig As LogConfig
|
||||
Private _Logger As Logger
|
||||
|
||||
@ -37,7 +38,7 @@ Public Class WindowsService
|
||||
Try
|
||||
Dim oServicePath As String = AppDomain.CurrentDomain.BaseDirectory
|
||||
|
||||
_LogConfig = New LogConfig(LogConfig.PathType.CustomPath, oServicePath)
|
||||
_LogConfig = New LogConfig(LogConfig.PathType.CustomPath, IO.Path.Combine(oServicePath, "Log"))
|
||||
_LogConfig.Debug = True
|
||||
_Logger = _LogConfig.GetLogger()
|
||||
_Logger.Info("Service {0} is starting...", SERVICE_DISPLAY_NAME)
|
||||
@ -79,14 +80,27 @@ Public Class WindowsService
|
||||
EDMIService.Scheduler = _Scheduler
|
||||
|
||||
_Logger.Debug("Starting WCF ServiceHost")
|
||||
_ServiceHost = New ServiceHost(GetType(EDMIService))
|
||||
|
||||
Dim oBaseAddresses() As Uri = {New Uri("net.tcp://localhost:9000/DigitalData/Services/Main")}
|
||||
_ServiceHost = New ServiceHost(Of EDMIService)(oBaseAddresses)
|
||||
_ServiceHost.EnableMetadataExchange(False)
|
||||
|
||||
_Logger.Debug("Listing Endpoints:")
|
||||
For Each oEndpoint In _ServiceHost.Description.Endpoints
|
||||
_Logger.Debug("Name: {0}", oEndpoint.Name)
|
||||
_Logger.Debug("Address: {0}", oEndpoint.Address.ToString)
|
||||
_Logger.Debug("Listen Uri: {0}", oEndpoint.ListenUri.AbsoluteUri)
|
||||
_Logger.Debug("Binding: {0}", oEndpoint.Binding.Name)
|
||||
_Logger.Debug("Contract: {0}", oEndpoint.Contract.Name)
|
||||
Next
|
||||
|
||||
_ServiceHost.Open()
|
||||
|
||||
_Logger.Info("WCF ServiceHost started")
|
||||
|
||||
_Logger.Info("Service {0} successfully started", SERVICE_DISPLAY_NAME)
|
||||
Catch ex As Exception
|
||||
_Logger.Error(ex, "Failed to start the service host!")
|
||||
_Logger.Warn("Unexpected Error while starting the service: {0}", ex.Message)
|
||||
_Logger.Error(ex)
|
||||
GracefullyStop()
|
||||
End Try
|
||||
End Sub
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user