public override bool Handle(string httpMethod, string path, string querystring, HttpHeaders headers, XmlDocument request, out XmlDocument response) { response = null; try { object result; if (_invoker.Invoke(request, out result)) { response = XmlRpcFormatter.EncodeResponse(result); return(true); } if (_final) { string methodName; object[] parameters; XmlRpcParser.Parse(request, out methodName, out parameters); response = XmlRpcFormatter.EncodeFault(405, "XML-RPC method '" + methodName + "' not implemented"); return(true); } return(false); } catch (XmlRpcServerException xpse) { response = XmlRpcFormatter.EncodeFault(xpse.FaultCode, xpse.FaultString); } catch (Exception e) { response = XmlRpcFormatter.EncodeFault(500, e.Message); } return(true); }
public bool Invoke(XmlDocument xmlRpcRequest, out object result) { string methodName; object[] parameters; XmlRpcParser.Parse(xmlRpcRequest, out methodName, out parameters); MethodInfo mi = (MethodInfo)_methods[methodName]; if (mi != null) { ParameterInfo[] parameterInfos = mi.GetParameters(); for (int i = 0; i < parameters.Length && i < parameterInfos.Length; i++) { parameters[i] = XmlRpcSerializer.FromXmlRpc(parameters[i], parameterInfos[i].ParameterType); } object invokeResult; try { invokeResult = mi.Invoke(_target, parameters); } catch (TargetInvocationException tie) { throw tie.InnerException; } result = XmlRpcSerializer.ToXmlRpc(invokeResult); return(true); } if (_dynamicInvoke != null) { if (_dynamicInvoke.Invoke(methodName, parameters, out result)) { result = XmlRpcSerializer.ToXmlRpc(result); return(true); } } result = null; return(false); }