System.ServiceModel.Channels.Message IDispatchMessageFormatter.SerializeReply(System.ServiceModel.Channels.MessageVersion messageVersion, object[] parameters, object result)
        {
            MemoryStream        memStream = new MemoryStream();
            XmlDictionaryWriter writer    = XmlDictionaryWriter.CreateTextWriter(memStream);

            //writer.WriteStartElement(XmlRpcProtocol.MethodResponse);
            writer.WriteStartElement(XmlRpcProtocol.Params);
            writer.WriteStartElement(XmlRpcProtocol.Param);
            writer.WriteStartElement(XmlRpcProtocol.Value);
            XmlRpcDataContractSerializationHelper.Serialize(writer, result);
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndElement();
            //writer.WriteEndElement();
            writer.Flush();

            memStream.Position = 0;
            XmlDictionaryReaderQuotas   quotas        = new XmlDictionaryReaderQuotas();
            XmlRpcMessage               xmlRpcMessage = new XmlRpcMessage(XmlDictionaryReader.CreateTextReader(memStream, quotas));
            HttpResponseMessageProperty hrmp          = new HttpResponseMessageProperty();

            hrmp.Headers.Add(HttpResponseHeader.ContentType, "text/xml");
            xmlRpcMessage.Properties.Add(HttpResponseMessageProperty.Name, hrmp);
            return(xmlRpcMessage);
        }
        public string SelectOperation(ref System.ServiceModel.Channels.Message message)
        {
            XmlRpcMessage xmlRpcMessage = CreateXmlRpcMessage(message);

            message = xmlRpcMessage;

            if (xmlRpcMessage.Properties.ContainsKey("XmlRpcMethodName"))
            {
                string methodName = (string)message.Properties["XmlRpcMethodName"];
                foreach (OperationDescription op in _contract.Operations)
                {
                    if (op.Messages[0].Action.EndsWith(methodName))
                    {
                        return(op.Name);
                    }
                }
            }
            throw new EndpointNotFoundException();
        }
        System.ServiceModel.Channels.Message IClientMessageFormatter.SerializeRequest(System.ServiceModel.Channels.MessageVersion messageVersion, object[] parameters)
        {
            MemoryStream        memStream = new MemoryStream();
            XmlDictionaryWriter writer    = XmlDictionaryWriter.CreateTextWriter(memStream);

            writer.WriteStartElement(XmlRpcProtocol.Params);
            foreach (object param in parameters)
            {
                writer.WriteStartElement(XmlRpcProtocol.Param);
                writer.WriteStartElement(XmlRpcProtocol.Value);
                XmlRpcDataContractSerializationHelper.Serialize(writer, param);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.Flush();

            memStream.Position = 0;
            XmlDictionaryReaderQuotas quotas        = new XmlDictionaryReaderQuotas();
            XmlRpcMessage             xmlRpcMessage = new XmlRpcMessage(_operationDescription.Messages[0].Action, XmlDictionaryReader.CreateTextReader(memStream, quotas), false);

            return(xmlRpcMessage);
        }
        System.ServiceModel.Channels.Message IClientMessageFormatter.SerializeRequest(System.ServiceModel.Channels.MessageVersion messageVersion, object[] parameters)
        {
            MemoryStream memStream = new MemoryStream();
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(memStream);

            writer.WriteStartElement(XmlRpcProtocol.Params);
            foreach (object param in parameters)
            {
                writer.WriteStartElement(XmlRpcProtocol.Param);
                writer.WriteStartElement(XmlRpcProtocol.Value);
                XmlRpcDataContractSerializationHelper.Serialize(writer, param);
                writer.WriteEndElement();
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
            writer.Flush();

            memStream.Position = 0;
            XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
            XmlRpcMessage xmlRpcMessage = new XmlRpcMessage(_operationDescription.Messages[0].Action,XmlDictionaryReader.CreateTextReader(memStream, quotas), false);
            return xmlRpcMessage;
        }
        System.ServiceModel.Channels.Message IDispatchMessageFormatter.SerializeReply(System.ServiceModel.Channels.MessageVersion messageVersion, object[] parameters, object result)
        {
            MemoryStream memStream = new MemoryStream();
            XmlDictionaryWriter writer = XmlDictionaryWriter.CreateTextWriter(memStream);

            //writer.WriteStartElement(XmlRpcProtocol.MethodResponse);
            writer.WriteStartElement(XmlRpcProtocol.Params);
            writer.WriteStartElement(XmlRpcProtocol.Param);
            writer.WriteStartElement(XmlRpcProtocol.Value);
            XmlRpcDataContractSerializationHelper.Serialize(writer, result);
            writer.WriteEndElement();
            writer.WriteEndElement();
            writer.WriteEndElement();
            //writer.WriteEndElement();
            writer.Flush();

            memStream.Position = 0;
            XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
            XmlRpcMessage xmlRpcMessage = new XmlRpcMessage(XmlDictionaryReader.CreateTextReader(memStream, quotas));
            HttpResponseMessageProperty hrmp = new HttpResponseMessageProperty();
            hrmp.Headers.Add(HttpResponseHeader.ContentType, "text/xml");
            xmlRpcMessage.Properties.Add(HttpResponseMessageProperty.Name, hrmp);
            return xmlRpcMessage;
        }