public void StartProcessProtocolListenerChannel(string protocolId, IListenerChannelCallback listenerChannelCallback) { try { if (protocolId == null) { throw new ArgumentNullException("protocolId"); } ProtocolElement element = this.ProtocolsConfig.Protocols[protocolId]; if (element == null) { throw new ArgumentException(System.Web.SR.GetString("Unknown_protocol_id", new object[] { protocolId })); } ProcessProtocolHandler handler = null; Type type = null; type = this.ValidateAndGetType(element, element.ProcessHandlerType, typeof(ProcessProtocolHandler), "ProcessHandlerType"); lock (this) { handler = this._protocolHandlers[protocolId] as ProcessProtocolHandler; if (handler == null) { handler = (ProcessProtocolHandler)Activator.CreateInstance(type); this._protocolHandlers[protocolId] = handler; } } if (handler != null) { handler.StartListenerChannel(listenerChannelCallback, this); } } catch (Exception exception) { using (new ProcessImpersonationContext()) { Misc.ReportUnhandledException(exception, new string[] { System.Web.SR.GetString("Invalid_Process_Prot_Type") }); } throw; } }