public void Open(Uri baseAddress, TransportListenerSettings settings, ITransportListenerCallback callback)
{
// assign a unique guid to the listener.
m_listenerId = Guid.NewGuid().ToString();
m_uri = baseAddress;
m_descriptions = settings.Descriptions;
m_configuration = settings.Configuration;
// initialize the quotas.
m_quotas = new TcpChannelQuotas();
m_quotas.MaxBufferSize = m_configuration.MaxBufferSize;
m_quotas.MaxMessageSize = m_configuration.MaxMessageSize;
m_quotas.ChannelLifetime = m_configuration.ChannelLifetime;
m_quotas.SecurityTokenLifetime = m_configuration.SecurityTokenLifetime;
m_quotas.MessageContext = new ServiceMessageContext();
m_quotas.MessageContext.MaxArrayLength = m_configuration.MaxArrayLength;
m_quotas.MessageContext.MaxByteStringLength = m_configuration.MaxByteStringLength;
m_quotas.MessageContext.MaxMessageSize = m_configuration.MaxMessageSize;
m_quotas.MessageContext.MaxStringLength = m_configuration.MaxStringLength;
m_quotas.MessageContext.NamespaceUris = settings.NamespaceUris;
m_quotas.MessageContext.ServerUris = new StringTable();
m_quotas.MessageContext.Factory = settings.Factory;
m_quotas.CertificateValidator = settings.CertificateValidator;
// save the callback to the server.
m_callback = callback;
m_serverCert = settings.ServerCertificate;
// start the listener
Start();
}