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); }