Imports System.ServiceModel
Imports System.Xml


Public Class Channel
    ' Infos about MaxBufferSize and MaxBufferPoolSize
    ' 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 = 104857600 ' 100MB
    Public Const MAX_BUFFER_POOL_SIZE = 1048576 ' 1MB

    Public Const MAX_CONNECTIONS = 500
    Public Const MAX_ARRAY_LENGTH = 2147483647
    Public Const MAX_STRING_CONTENT_LENGTH = 2147483647

    Public Shared Function GetBinding(Optional AuthenticationMode As TcpClientCredentialType = TcpClientCredentialType.Windows) As NetTcpBinding
        Return New NetTcpBinding() With {
            .MaxReceivedMessageSize = MAX_RECEIVED_MESSAGE_SIZE,
            .MaxBufferSize = MAX_BUFFER_SIZE,
            .MaxBufferPoolSize = MAX_BUFFER_POOL_SIZE,
            .TransferMode = TransferMode.Streamed,
            .Security = New NetTcpSecurity() With {
                .Mode = SecurityMode.Transport,
                .Transport = New TcpTransportSecurity() With {
                    .ClientCredentialType = AuthenticationMode
                }
            },
            .ReaderQuotas = New XmlDictionaryReaderQuotas() With {
                .MaxArrayLength = MAX_ARRAY_LENGTH,
                .MaxStringContentLength = MAX_STRING_CONTENT_LENGTH
            }
        }
    End Function
End Class


