Monday, 20 April 2009

WCF - Creating Endpoints in Code

Here is an example of how you can define a WCF Server in code without having to have the configuration in a config file.

 Private Sub StartServiceFunction()
        Dim host As ServiceHost

        Dim tcpBaseAddr As Uri
        tcpBaseAddr = New Uri(ReturnTCPUri())
        Dim httpBaseAddr As Uri
        httpBaseAddr = New Uri(ReturnHTTPUri())
        Dim baseAddresses() As Uri = New Uri() {tcpBaseAddr, httpBaseAddr}

        host = New ServiceHost(GetType(ChatService), baseAddresses)


        Dim metadataBehavior As ServiceMetadataBehavior
        metadataBehavior = New ServiceMetadataBehavior()

        metadataBehavior.HttpGetEnabled = True

        host.Description.Behaviors.Add(metadataBehavior)

        Dim tcpBinding As NetTcpBinding
        Dim mexBinding As System.ServiceModel.Channels.Binding
        tcpBinding = New NetTcpBinding()
        tcpBinding.ReliableSession.Enabled = True
        tcpBinding.Security.Mode = SecurityMode.None


        mexBinding = System.ServiceModel.Description.MetadataExchangeBindings.CreateMexTcpBinding()

        host.AddServiceEndpoint(GetType(CMExpertAssistanceServer.IChat), tcpBinding, ReturnTCPUri())
        host.AddServiceEndpoint(GetType(IMetadataExchange), mexBinding, "mex")

        Try
            host.Open()
        Catch ex As Exception
            m_oCMLog.SendLogEx(cmLogAPI.Callmedia.CMLog.cmLogType.cmLogError, ex.Message)
            End
        End Try


    End Sub

 Public Function ReturnTCPUri()
        Dim sURI As String
        Dim sIP, sPort As String

        sIP = ConfigurationManager.AppSettings("BindIPAddress")
        sPort = ConfigurationManager.AppSettings("TCPPort")

        sURI = String.Format("net.tcp://{0}:{1}/chatservice", sIP, sPort)

        Return sURI
    End Function

    Public Function ReturnHTTPUri()
        Dim sURI As String
        Dim sIP, sPort As String
        sIP = ConfigurationManager.AppSettings("BindIPAddress")
        sPort = ConfigurationManager.AppSettings("HTTPPort")

        sURI = String.Format("http://{0}:{1}/CMChat", sIP, sPort)

        Return sURI
    End Function

Labels: , ,