public void DoWork() { TTransport inputTransport = null; TTransport outputTransport = null; TProtocol inputProtocol = null; TProtocol outputProtocol = null; try { inputTransport = parent.inputTransportFactory.GetTransport(client); outputTransport = parent.outputTransportFactory.GetTransport(client); inputProtocol = parent.inputProtocolFactory.GetProtocol(inputTransport); outputProtocol = parent.outputProtocolFactory.GetProtocol(outputTransport); while (parent.processor.Process(inputProtocol, outputProtocol)) { //keep processing requests until client disconnects } } catch (TTransportException) { } catch (Exception x) { parent.logDelegate("Error: " + x); } if (inputTransport != null) { inputTransport.Close(); } if (outputTransport != null) { outputTransport.Close(); } lock (parent.clientLock) { parent.clientThreads.Remove(Thread.CurrentThread); } return; }