private static object CreateChannelSinkProvider(RemotingXmlConfigFileData.SinkProviderEntry entry, bool bServer)
        {
            object obj2 = null;
            Type   c    = RemotingConfigInfo.LoadType(entry.TypeName, entry.AssemblyName);

            if (bServer)
            {
                if (!typeof(IServerChannelSinkProvider).IsAssignableFrom(c))
                {
                    throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Config_InvalidSinkProviderType"), new object[] { c.FullName, "IServerChannelSinkProvider" }));
                }
            }
            else if (!typeof(IClientChannelSinkProvider).IsAssignableFrom(c))
            {
                throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Config_InvalidSinkProviderType"), new object[] { c.FullName, "IClientChannelSinkProvider" }));
            }
            if (entry.IsFormatter && ((bServer && !typeof(IServerFormatterSinkProvider).IsAssignableFrom(c)) || (!bServer && !typeof(IClientFormatterSinkProvider).IsAssignableFrom(c))))
            {
                throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Config_SinkProviderNotFormatter"), new object[] { c.FullName }));
            }
            object[] args = new object[] { entry.Properties, entry.ProviderData };
            try
            {
                obj2 = Activator.CreateInstance(c, BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance, null, args, null, null);
            }
            catch (MissingMethodException)
            {
                throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Config_SinkProviderMissingCtor"), new object[] { c.FullName, "MySinkProvider(IDictionary properties, ICollection providerData)" }));
            }
            return(obj2);
        }
        internal static IChannel CreateChannelFromConfigEntry(RemotingXmlConfigFileData.ChannelEntry entry)
        {
            object[] objArray;
            Type     c     = RemotingConfigInfo.LoadType(entry.TypeName, entry.AssemblyName);
            bool     flag  = typeof(IChannelReceiver).IsAssignableFrom(c);
            bool     flag2 = typeof(IChannelSender).IsAssignableFrom(c);
            IClientChannelSinkProvider provider  = null;
            IServerChannelSinkProvider provider2 = null;

            if (entry.ClientSinkProviders.Count > 0)
            {
                provider = CreateClientChannelSinkProviderChain(entry.ClientSinkProviders);
            }
            if (entry.ServerSinkProviders.Count > 0)
            {
                provider2 = CreateServerChannelSinkProviderChain(entry.ServerSinkProviders);
            }
            if (flag && flag2)
            {
                objArray = new object[] { entry.Properties, provider, provider2 };
            }
            else if (flag)
            {
                objArray = new object[] { entry.Properties, provider2 };
            }
            else
            {
                if (!flag2)
                {
                    throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Config_InvalidChannelType"), new object[] { c.FullName }));
                }
                objArray = new object[] { entry.Properties, provider };
            }
            IChannel channel = null;

            try
            {
                channel = (IChannel)Activator.CreateInstance(c, BindingFlags.CreateInstance | BindingFlags.Public | BindingFlags.Instance, null, objArray, null, null);
            }
            catch (MissingMethodException)
            {
                string str = null;
                if (flag && flag2)
                {
                    str = "MyChannel(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)";
                }
                else if (flag)
                {
                    str = "MyChannel(IDictionary properties, IServerChannelSinkProvider serverSinkProvider)";
                }
                else if (flag2)
                {
                    str = "MyChannel(IDictionary properties, IClientChannelSinkProvider clientSinkProvider)";
                }
                throw new RemotingException(string.Format(CultureInfo.CurrentCulture, Environment.GetResourceString("Remoting_Config_ChannelMissingCtor"), new object[] { c.FullName, str }));
            }
            return(channel);
        }