Imports System.ServiceModel Imports System.Xml Imports DigitalData.Modules.Base Imports DigitalData.Modules.Logging Namespace WCF Public Class Channel(Of TChannel As IClientChannel) Inherits BaseClass Private ReadOnly ChannelFactory As ChannelFactory(Of TChannel) Public Event Reconnect As EventHandler Public Sub New(pLogConfig As LogConfig, pServerAddress As ServerAddress, Optional pName As String = "Main") MyBase.New(pLogConfig) ChannelFactory = GetChannelFactory(pServerAddress, pName) End Sub ''' ''' Creates a channel and adds a Faulted-Handler ''' ''' A channel object Public Function GetChannel() As TChannel Try Logger.Debug("Creating channel.") Dim oChannel = ChannelFactory.CreateChannel() AddHandler oChannel.Faulted, Sub() RaiseEvent Reconnect(Me, Nothing) Return oChannel Catch ex As Exception Logger.Error(ex) Throw ex End Try End Function ''' ''' Creates and returns a channel factory with the supplied name and address ''' ''' The service name, will be: net.tcp://ip:port/DigitalData/Services/[name] ''' The service address, in the form of ip address and port ''' Private Function GetChannelFactory(pAddress As ServerAddress, pName As String) As ChannelFactory(Of TChannel) Dim oBinding = Binding.GetBinding() Dim oAddress = New EndpointAddress(Binding.GetAddress(pAddress.Host, pAddress.Port, pName)) Dim oFactory = New ChannelFactory(Of TChannel)(oBinding, oAddress) Return oFactory End Function End Class End Namespace