private void ReceiveCallback(object state) { TcpClientSocketHandler handler = null; IClientChannelSinkStack dataArrivedCallbackState = null; try { handler = (TcpClientSocketHandler)state; dataArrivedCallbackState = (IClientChannelSinkStack)handler.DataArrivedCallbackState; ITransportHeaders headers = handler.ReadHeaders(); Stream responseStream = handler.GetResponseStream(); dataArrivedCallbackState.AsyncProcessResponse(headers, responseStream); } catch (Exception exception) { try { if (dataArrivedCallbackState != null) { dataArrivedCallbackState.DispatchException(exception); } } catch { } } }
} // SendRequestWithRetry private void ReceiveCallback(Object state) { TcpClientSocketHandler clientSocket = null; IClientChannelSinkStack sinkStack = null; try { clientSocket = (TcpClientSocketHandler)state; sinkStack = (IClientChannelSinkStack)clientSocket.DataArrivedCallbackState; ITransportHeaders responseHeaders = clientSocket.ReadHeaders(); Stream responseStream = clientSocket.GetResponseStream(); // call down the sink chain sinkStack.AsyncProcessResponse(responseHeaders, responseStream); } catch (Exception e) { try { if (sinkStack != null) { sinkStack.DispatchException(e); } } catch (Exception) { // Fatal Error.. ignore } } // The client socket will be returned to the cache // when the response stream is closed. } // ReceiveCallback
public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { Debugger.NotifyOfCrossThreadDependency(); TcpClientSocketHandler handler = this.SendRequestWithRetry(msg, requestHeaders, requestStream); responseHeaders = handler.ReadHeaders(); responseStream = handler.GetResponseStream(); }
} // TcpClientTransportSink public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { InternalRemotingServices.RemotingTrace("TcpClientTransportSink::ProcessMessage"); TcpClientSocketHandler clientSocket = SendRequestWithRetry(msg, requestHeaders, requestStream); // receive response responseHeaders = clientSocket.ReadHeaders(); responseStream = clientSocket.GetResponseStream(); // The client socket will be returned to the cache // when the response stream is closed. } // ProcessMessage
} // TcpClientTransportSink public void ProcessMessage(IMessage msg, ITransportHeaders requestHeaders, Stream requestStream, out ITransportHeaders responseHeaders, out Stream responseStream) { InternalRemotingServices.RemotingTrace("TcpClientTransportSink::ProcessMessage"); // the call to SendRequest can block a func eval, so we want to notify the debugger that we're // about to call a blocking operation. System.Diagnostics.Debugger.NotifyOfCrossThreadDependency(); TcpClientSocketHandler clientSocket = SendRequestWithRetry(msg, requestHeaders, requestStream); // receive response responseHeaders = clientSocket.ReadHeaders(); responseStream = clientSocket.GetResponseStream(); // The client socket will be returned to the cache // when the response stream is closed. } // ProcessMessage