public ProxyManager(T proxy, XmlRpcResponseEventHandler responseHandler)
            {
                _proxy           = (IXmlRpcProxy)proxy;
                _responseHandler = responseHandler;

                if (_responseHandler != null)
                {
                    _proxy.ResponseEvent += _responseHandler;
                }
            }
        private ProxyManager <TService> CreateProxyManager(XmlRpcResponseEventHandler responseHandler = null)
        {
            var definition = XmlRpcProxyGen.Create <TService>();

// ReSharper disable PossibleInvalidCastException
            var proxy = (IXmlRpcProxy)definition;

// ReSharper restore PossibleInvalidCastException

            proxy.AttachLogger(new MethodListenerXmlRpcLogger(_listenerProvider.GetListener()));

            proxy.Url       = _uri.AbsoluteUri;
            proxy.UserAgent = UserAgent;

            return(new ProxyManager <TService>(definition, responseHandler));
        }
        public TResponse Invoke <TDefinitionResponse, TResponse>(Func <TService, TDefinitionResponse> method)
        {
            TResponse response = default(TResponse);

            XmlRpcResponseEventHandler responseHandler = (sender, args) =>
            {
                var            deserializer = new XmlRpcResponseDeserializer();
                XmlRpcResponse res          = deserializer.DeserializeResponse(args.ResponseStream, typeof(TResponse));
                response = (TResponse)res.retVal;
            };

            using (ProxyManager <TService> manager = CreateProxyManager(responseHandler))
            {
                method(manager);
            }

            return(response);
        }