Imports System
Imports System.Runtime.Remoting
Imports System.Runtime.Remoting.Channels
Imports System.Runtime.Remoting.Channels.Tcp
Imports System.Runtime.Remoting.Channels.Ipc

Friend Class ChannelConfigurator
    Private _ServerName As String
    Private _PortNumber As Integer
    Private _Protocol As TransportProtocol
    Private CHANNEL_TCP_NAME As String = Guid.NewGuid().ToString()
    Private CHANNEL_IPC_NAME As String = Guid.NewGuid().ToString()


    Private Const DEFAULT_PORTNUMBER As Integer = 9792
    ''' <summary>
    ''' Defines the protocol to use when accessing Content Studio.
    ''' </summary>
    Public Enum TransportProtocol
        ''' <summary>
        ''' Using the TCP protocol and a certain port number.
        ''' </summary>
        TCP
        ''' <summary>
        ''' Using the IPC (Inter process communication) protocol for the best performance on the local machine.
        ''' </summary>
        IPC
    End Enum

    ''' <summary>
    ''' Creates a new configurating for access to the local machine using the TCP protocol and the default port number.
    ''' </summary>
    Public Sub New()
        _PortNumber = DEFAULT_PORTNUMBER
        _Protocol = TransportProtocol.TCP
        _ServerName = "localhost"
    End Sub
    ''' <summary>
    ''' Creates a new configuration for access to the local machine using the selected protocol and port number.
    ''' </summary>
    ''' <param name="Protocol">The protocol to use</param>
    ''' <param name="portNumber">The port number to use</param>
    Public Sub New(ByVal protocol As TransportProtocol, ByVal portNumber As Integer)
        _PortNumber = portNumber
        _Protocol = protocol
        _ServerName = "localhost"
    End Sub
    ''' <summary>
    ''' Creates a new configuration for access to the local machine using the selected protocol and the default port number.
    ''' </summary>
    ''' <param name="Protocol">The protocol to use</param>
    Public Sub New(ByVal protocol As TransportProtocol)
        _Protocol = protocol
        _PortNumber = DEFAULT_PORTNUMBER
        _ServerName = "localhost"
    End Sub

    ''' <summary>
    ''' Creates a new configuration for access to a remote machine using the TCP protocol and a specific port number.
    ''' </summary>
    ''' <param name="ServerName">The name of the server on the network to access</param>
    ''' <param name="portNumber">The port number to use</param>
    Public Sub New(ByVal serverName As String, ByVal portNumber As Integer)
        _PortNumber = portNumber
        _Protocol = TransportProtocol.TCP
        _ServerName = serverName
    End Sub

    ''' <summary>
    ''' Creates a new configuration for access to a remote machine using the TCP protocol and the default port number.
    ''' </summary>
    ''' <param name="ServerName">The name of the server on the network to access</param>
    Public Sub New(ByVal serverName As String)
        _PortNumber = DEFAULT_PORTNUMBER
        _Protocol = TransportProtocol.TCP
        _ServerName = serverName
    End Sub
    ''' <summary>
    ''' Configures the calling process for using Content Studio with remoting.
    ''' </summary>
    Public Sub Configure()
        Dim dict As New System.Collections.Hashtable()
        dict("port") = _PortNumber
        dict("name") = CHANNEL_TCP_NAME
        dict("secure") = True

        dict("authenticationMode") = "Impersonate"
        dict("tokenImpersonationLevel") = System.Security.Principal.TokenImpersonationLevel.Impersonation

        ' Set up the client channel.
        Dim theChannel As New TcpClientChannel(dict, Nothing)
        ChannelServices.RegisterChannel(theChannel, True)

        'Session managager must always execute on the TCP channel due to an identity spoofing bug.
        RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.SessionManager), _
                                                          "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/SessionManager")
        If (_Protocol = TransportProtocol.TCP) Then
            'ContentStudio namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.CSApplication), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/CSApplication")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.LicenseReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/LicenseReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.SettingManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/SettingManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.ErrorManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/ErrorManager")

            'ContentStudio.Security namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.AccessControl), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/AccessControl")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.Group), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/Group")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.GlobalTrusteeRights), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/GlobalTrusteeRights")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.TrusteeSearcher), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/TrusteeSearcher")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.User), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/User")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.UserProperties), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/UserProperties")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.WinNetworkBrowser), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/WinNetworkBrowser")

            'ContentStudio.Document namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.CategoryManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/CategoryManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.CategoryReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/CategoryReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentBrowser), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocumentBrowser")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentComponentSupport), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocumentComponentSupport")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocTypeManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocTypeManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentEncoding), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocumentEncoding")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocumentManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.PreviewManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/PreviewManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocumentReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DirectiveControl), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DirectiveControl")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentSyncronizer), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/DocumentSyncronizer")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.FolderReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/FolderReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.FolderSyncronizer), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/FolderSyncronizer")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.GUOID), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/GUOID")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.PublishControl), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/PublishControl")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.RevisionManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/RevisionManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Statistics), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/Statistics")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.UnitManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/UnitManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.UnitReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/UnitReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.VersionHistory), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/VersionHistory")

            'ContentStudio.Document.EPT namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.EPT), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/EPT")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.EPTSchema), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/EPTSchema")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.XmlIndexData), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/XmlIndexData")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.XmlIndexQuery), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/XmlIndexQuery")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.XmlIndexTags), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/XmlIndexTags")

            'ContentStudio.Document.Fulltext namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Fulltext.FulltextManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/FulltextManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Fulltext.FulltextSearch), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/FulltextSearch")

            'ContentStudio.Document.Workflow.Management namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Management.WorkflowDefinition), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/WorkflowDefinition")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Management.WorkflowCategoryDefinition), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/WorkflowCategoryDefinition")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Management.WFLogManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/WFLogManager")


            'ContentStudio.Document.IndexedTree namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.IndexedTree.IndexedTreeManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/IndexedTreeManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.IndexedTree.IndexedTreeNavigator), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/IndexedTreeNavigator")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.IndexedTree.IndexedTreeReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/IndexedTreeReader")

            'ContentStudio.Document.Menu namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Menu.MenuCreator), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/MenuCreator")

            '************* (new in CS 5.2) ******************
            'ContentStudio.Document.Subscription namespace 
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Subscription.NativeSubscriptionManager), _
                                                              "tcp://" & _ServerName & ":" + _PortNumber.ToString() & "/CSServer5/NativeSubscriptionManager")
            '************************************************

            'ContentStudio.Document.Workflow namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Workflow), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/Workflow")

            'ContentStudio.EventActions namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.EventActions.EventActions), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/EventActions")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.EventActions.ServiceManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/ServiceManager")

            'ContentStudio.Notification namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Notifications.NotificationManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/NotificationManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Notifications.NotificationReader), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/NotificationReader")

            'ContentStudio.PDFServices namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.PDFServices.PDFQueueManager), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/PDFQueueManager")

            'ContentStudio.Document.MLC namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.MLC.MLC), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/MLC")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.MLC.MLCDocuments), _
                                                              "tcp://" & _ServerName & ":" & _PortNumber.ToString() & "/CSServer5/MLCDocuments")
        Else
            ChannelServices.RegisterChannel(New IpcClientChannel(CHANNEL_IPC_NAME, Nothing), True)


            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.CSApplication), _
                                                              "ipc://CS-ipc/CSServer5/CSApplication")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.ErrorManager), _
                                                              "ipc://CS-ipc/CSServer5/ErrorManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.LicenseReader), _
                                                              "ipc://CS-ipc/CSServer5/LicenseReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.SettingManager), _
                                                              "ipc://CS-ipc/CSServer5/SettingManager")

            'ContentStudio.Security namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.AccessControl), _
                                                              "ipc://CS-ipc/CSServer5/AccessControl")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.Group), _
                                                              "ipc://CS-ipc/CSServer5/Group")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.GlobalTrusteeRights), _
                                                              "ipc://CS-ipc/CSServer5/GlobalTrusteeRights")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.TrusteeSearcher), _
                                                              "ipc://CS-ipc/CSServer5/TrusteeSearcher")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.User), _
                                                              "ipc://CS-ipc/CSServer5/User")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.UserProperties), _
                                                              "ipc://CS-ipc/CSServer5/UserProperties")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Security.WinNetworkBrowser), _
                                                              "ipc://CS-ipc/CSServer5/WinNetworkBrowser")

            'ContentStudio.Document namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.CategoryManager), _
                                                              "ipc://CS-ipc/CSServer5/CategoryManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.CategoryReader), _
                                                              "ipc://CS-ipc/CSServer5/CategoryReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentBrowser), _
                                                              "ipc://CS-ipc/CSServer5/DocumentBrowser")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentComponentSupport), _
                                                              "ipc://CS-ipc/CSServer5/DocumentComponentSupport")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocTypeManager), _
                                                              "ipc://CS-ipc/CSServer5/DocTypeManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentEncoding), _
                                                              "ipc://CS-ipc/CSServer5/DocumentEncoding")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentManager), _
                                                              "ipc://CS-ipc/CSServer5/DocumentManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.PreviewManager), _
                                                              "ipc://CS-ipc/CSServer5/PreviewManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentReader), _
                                                              "ipc://CS-ipc/CSServer5/DocumentReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DirectiveControl), _
                                                              "ipc://CS-ipc/CSServer5/DirectiveControl")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.DocumentSyncronizer), _
                                                              "ipc://CS-ipc/CSServer5/DocumentSyncronizer")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.FolderReader), _
                                                              "ipc://CS-ipc/CSServer5/FolderReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.FolderSyncronizer), _
                                                              "ipc://CS-ipc/CSServer5/FolderSyncronizer")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.GUOID), _
                                                              "ipc://CS-ipc/CSServer5/GUOID")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.PublishControl), _
                                                              "ipc://CS-ipc/CSServer5/PublishControl")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.RevisionManager), _
                                                              "ipc://CS-ipc/CSServer5/RevisionManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Statistics), _
                                                              "ipc://CS-ipc/CSServer5/Statistics")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.UnitManager), _
                                                              "ipc://CS-ipc/CSServer5/UnitManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.UnitReader), _
                                                              "ipc://CS-ipc/CSServer5/UnitReader")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.VersionHistory), _
                                                              "ipc://CS-ipc/CSServer5/VersionHistory")
            'ContentStudio.Document.EPT namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.EPT), _
                                                              "ipc://CS-ipc/CSServer5/EPT")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.EPTSchema), _
                                                              "ipc://CS-ipc/CSServer5/EPTSchema")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.XmlIndexData), _
                                                              "ipc://CS-ipc/CSServer5/XmlIndexData")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.XmlIndexQuery), _
                                                              "ipc://CS-ipc/CSServer5/XmlIndexQuery")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.EPT.XmlIndexTags), _
                                                              "ipc://CS-ipc/CSServer5/XmlIndexTags")

            'ContentStudio.Document.Fulltext namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Fulltext.FulltextManager), _
                                                              "ipc://CS-ipc/CSServer5/FulltextManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Fulltext.FulltextSearch), _
                                                              "ipc://CS-ipc/CSServer5/FulltextSearch")

            'ContentStudio.Document.IndexedTree namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.IndexedTree.IndexedTreeManager), _
                                                              "ipc://CS-ipc/CSServer5/IndexedTreeManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.IndexedTree.IndexedTreeReader), _
                                                              "ipc://CS-ipc/CSServer5/IndexedTreeReader")

            'ContentStudio.Document.Menu namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Menu.MenuCreator), _
                                                              "ipc://CS-ipc/CSServer5/MenuCreator")

            'ContentStudio.Document.Workflow namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Workflow), _
                                                              "ipc://CS-ipc/CSServer5/Workflow")
                                                              
            '************* (new in CS 5.2) ******************
            'ContentStudio.Document.Subscription namespace 
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Subscription.NativeSubscriptionManager), _
                                                              "ipc://CS-ipc/CSServer5/NativeSubscriptionManager")
            '************************************************
                                                              
            //ContentStudio.Document.Workflow.Management namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Management.WorkflowDefinition), _
                                                              "ipc://CS-ipc/CSServer5/WorkflowDefinition")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Management.WorkflowCategoryDefinition), _
                                                              "ipc://CS-ipc/CSServer5/WorkflowCategoryDefinition")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.Workflow.Management.WFLogManager), _
                                                              "ipc://CS-ipc/CSServer5/WFLogManager")

            'ContentStudio.EventActions namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.EventActions.EventActions), _
                                                              "ipc://CS-ipc/CSServer5/EventActions")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.EventActions.ServiceManager), _
                                                              "ipc://CS-ipc/CSServer5/ServiceManager")

            'ContentStudio.Notification namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Notifications.NotificationManager), _
                                                              "ipc://CS-ipc/CSServer5/NotificationManager")
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Notifications.NotificationReader), _
                                                              "ipc://CS-ipc/CSServer5/NotificationReader")

            'ContentStudio.PDFServices namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.PDFServices.PDFQueueManager), _
                                                              "ipc://CS-ipc/CSServer5/PDFQueueManager")

            'ContentStudio.Document.MLC namespace
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.MLC.MLC), _
                                                              "ipc://CS-ipc/CSServer5/MLC")
            '<wellknown url="ipc://CS-ipc/CSServer5/MLCDocuments" type="ContentStudio.Document.MLC.MLCDocuments, CSServer5"/>
            RemotingConfiguration.RegisterWellKnownClientType(GetType(ContentStudio.Document.MLC.MLCDocuments), _
                                                              "ipc://CS-ipc/CSServer5/MLCDocuments")
        End If
    End Sub
End Class