internal IRequestHandler GetRequestHandler(RoutableReference rf, IObjectPrx proxy) { if (rf.GetCollocationOptimized()) { ObjectAdapter?adapter = FindObjectAdapter(proxy); if (adapter != null) { return(proxy.IceSetRequestHandler(new CollocatedRequestHandler(rf, adapter))); } } bool connect = false; ConnectRequestHandler handler; if (rf.GetCacheConnection()) { lock (_handlers) { if (!_handlers.TryGetValue(rf, out handler)) { handler = new ConnectRequestHandler(rf, proxy); _handlers.Add(rf, handler); connect = true; } } } else { handler = new ConnectRequestHandler(rf, proxy); connect = true; } if (connect) { rf.GetConnection(handler); } return(proxy.IceSetRequestHandler(handler.Connect(proxy))); }