Imports System.Net
Imports System.ServiceModel
Imports System.Xml

Namespace WCF
    Public Class Binding
        Public Shared Function GetBinding(Optional AuthenticationMode As TcpClientCredentialType = TcpClientCredentialType.Windows) As NetTcpBinding
            Return New NetTcpBinding() With {
            .MaxReceivedMessageSize = Constants.ChannelSettings.MAX_RECEIVED_MESSAGE_SIZE,
            .MaxBufferSize = Constants.ChannelSettings.MAX_BUFFER_SIZE,
            .MaxBufferPoolSize = Constants.ChannelSettings.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 = Constants.ChannelSettings.MAX_ARRAY_LENGTH,
                .MaxStringContentLength = Constants.ChannelSettings.MAX_STRING_CONTENT_LENGTH
            }
        }
        End Function

        Public Shared Function GetAddress(pHost As String, pPort As Integer, pName As String) As Uri
            Return New Uri($"net.tcp://{pHost}:{pPort}/DigitalData/Services/{pName}")
        End Function
    End Class

End Namespace