private void SerializeResponse(IMessage responseMsg, ref ITransportHeaders responseHeaders, ref Stream responseStream, IXmlRpcStreamRequestConfig config) { XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); responseStream = new MemoryStream(); responseHeaders = new TransportHeaders(); ReturnMessage retMsg = (ReturnMessage)responseMsg; XmlRpcResponse response; if (retMsg.Exception == null) { response = new XmlRpcResponse(retMsg.ReturnValue); } else if (retMsg.Exception is XmlRpcException) { response = new XmlRpcResponse(); response.Fault = (retMsg.Exception as XmlRpcException).Fault; } else { response = new XmlRpcResponse(); response.Fault = new XmlRpcFault(1, retMsg.Exception.Message); } serializer.WriteResponse(responseStream, response, config, TypeSerializerFactory); responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\""; }
public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, IMessage requestMsg, ITransportHeaders requestHeaders, Stream requestStream, out IMessage responseMsg, out ITransportHeaders responseHeaders, out Stream responseStream) { if (requestHeaders["SOAPAction"] != null) { // pass to next sink if this is a SOAP request with SOAPAction header. return NextChannelSink.ProcessMessage(sinkStack, requestMsg, requestHeaders, requestStream, out responseMsg, out responseHeaders, out responseStream); } XmlRpcHttpRequestConfig requestConfig = GetConfig(requestHeaders); try { MethodCall call = DeserializeRequest(requestHeaders, requestStream, requestConfig); sinkStack.Push(this, call); // forward to next sink in chain - pass request stream as null to // indicate that we have deserialized the request NextChannelSink.ProcessMessage(sinkStack, call, requestHeaders, null, out responseMsg, out responseHeaders, out responseStream); SerializeResponse(responseMsg, ref responseHeaders, ref responseStream, requestConfig); } catch (Exception ex) { responseMsg = new ReturnMessage(ex, (IMethodCallMessage)requestMsg); responseStream = new MemoryStream(); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); XmlRpcResponse faultResponse = new XmlRpcResponse(); faultResponse.Fault = new XmlRpcFault(0, ex.Message); serializer.WriteResponse(responseStream, faultResponse, requestConfig, TypeSerializerFactory); responseHeaders = new TransportHeaders(); responseHeaders["Content-Type"] = "text/xml; charset=\"utf-8\""; } return ServerProcessing.Complete; }
public void WriteXmlRpcFaultResponse() { XmlRpcResponse response = new XmlRpcResponse(null); response.Fault = new XmlRpcFault(4, "Too many parameters."); StringBuilder sb = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new StringWriter(sb)); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); serializer.WriteResponse(writer, response, null, new TypeSerializerFactory()); Assert.IsEqualTo(sb.ToString(), @"<?xml version=""1.0"" encoding=""utf-16""?><methodResponse><fault><value><struct><member><name>faultCode</name><value><i4>4</i4></value></member><member><name>faultString</name><value><string>Too many parameters.</string></value></member></struct></value></fault></methodResponse>"); }
public void WriteXmlRpcResponse() { XmlRpcResponse response = new XmlRpcResponse("South Dakota"); StringBuilder sb = new StringBuilder(); XmlTextWriter writer = new XmlTextWriter(new StringWriter(sb)); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); serializer.WriteResponse(writer, response, null, new TypeSerializerFactory()); Assert.IsEqualTo(sb.ToString(), @"<?xml version=""1.0"" encoding=""utf-16""?><methodResponse><params><param><value><string>South Dakota</string></value></param></params></methodResponse>"); }
public void ParseXmlRpcFaultResponse() { String xmlrpc = @" <methodResponse> <fault> <value> <struct> <member> <name>faultCode</name> <value><int>4</int></value> </member> <member> <name>faultString</name> <value><string>Too many parameters.</string></value> </member> </struct> </value> </fault> </methodResponse> "; XmlTextReader reader = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpc))); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); IXmlRpcResponse request = serializer.ReadResponse(reader, null, new TypeSerializerFactory()); Assert.IsNull(request.Result); Assert.IsNotNull(request.Fault); Assert.IsEqualTo(request.Fault.FaultCode, 4); Assert.IsEqualTo(request.Fault.FaultString, "Too many parameters."); }
public void ParseXmlRpcResponse() { String xmlrpc = @" <methodResponse> <params> <param> <value><string>South Dakota</string></value> </param> </params> </methodResponse>"; XmlTextReader reader = new XmlTextReader(new MemoryStream(Encoding.UTF8.GetBytes(xmlrpc))); XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); IXmlRpcResponse request = serializer.ReadResponse(reader, null, new TypeSerializerFactory()); Assert.IsNull(request.Fault); Assert.IsEqualTo(request.Result, "South Dakota"); }
private void WriteResponse(IXmlRpcStreamRequestConfig config, Stream outputStream, IXmlRpcResponse response) { XmlRpcResponseSerializer serializer = new XmlRpcResponseSerializer(); if (_xmlWriterFactory != null) serializer.XmlWriterFactory = _xmlWriterFactory; serializer.WriteResponse(outputStream, response, config, TypeSerializerFactory); }