private void SetupChannel()
{
// set channel data
// (These get changed inside of StartListening(), in the case where the listen
// port is 0, because we can't determine the port number until after the
// TcpListener starts.)
if (authSet && !_secure)
throw new RemotingException(CoreChannel.GetResourceString(
"Remoting_Tcp_AuthenticationConfigServer"));
_channelData = new ChannelDataStore(null);
if (_port > 0)
{
_channelData.ChannelUris = new String[1];
_channelData.ChannelUris[0] = GetChannelUri();
}
// set default provider (soap formatter) if no provider has been set
if (_sinkProvider == null)
_sinkProvider = CreateDefaultServerProviderChain();
CoreChannel.CollectChannelDataFromServerSinkProviders(_channelData, _sinkProvider);
// construct sink chain
IServerChannelSink sink = ChannelServices.CreateServerChannelSinkChain(_sinkProvider, this);
_transportSink = new TcpServerTransportSink(sink, _impersonate);
// Initialize the accept socket callback
_acceptSocketCallback = new AsyncCallback(AcceptSocketCallbackHelper);
if (_port >= 0)
{
// Open a TCP port and create a thread to start listening
_tcpListener = new ExclusiveTcpListener(_bindToAddr, _port);
// Wait for thread to spin up
StartListening(null);
}
} // SetupChannel