Exemplo n.º 1
0
 public XmlRpcMessage(MessageFault fault)
     : this()
 {
     isFault    = true;
     bodyReader = XmlRpcDataContractSerializationHelper.CreateFaultReader(fault);
     bodyReader.MoveToContent();
 }
        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);
        }
        object IClientMessageFormatter.DeserializeReply(System.ServiceModel.Channels.Message message, object[] parameters)
        {
            object returnValue = null;

            XmlDictionaryReader bodyContentReader = message.GetReaderAtBodyContents();

            bodyContentReader.ReadStartElement(XmlRpcProtocol.MethodResponse);
            bodyContentReader.ReadStartElement(XmlRpcProtocol.Params);
            if (bodyContentReader.IsStartElement(XmlRpcProtocol.Param))
            {
                bodyContentReader.ReadStartElement();
                if (bodyContentReader.IsStartElement(XmlRpcProtocol.Value))
                {
                    bodyContentReader.ReadStartElement();
                    if (bodyContentReader.NodeType == XmlNodeType.Text)
                    {
                        returnValue = bodyContentReader.ReadContentAs(_returnParameter.ParameterType, null);
                    }
                    else
                    {
                        returnValue = XmlRpcDataContractSerializationHelper.Deserialize(bodyContentReader, _returnParameter.ParameterType);
                    }
                    bodyContentReader.ReadEndElement();
                }
                bodyContentReader.ReadEndElement();
                bodyContentReader.ReadEndElement();
            }
            bodyContentReader.Close();
            return(returnValue);
        }
        void IDispatchMessageFormatter.DeserializeRequest(System.ServiceModel.Channels.Message message, object[] parameters)
        {
            int paramCounter = 0;

            XmlDictionaryReader bodyContentReader = message.GetReaderAtBodyContents();

            bodyContentReader.ReadStartElement(XmlRpcProtocol.Params);
            if (parameters.Length > 0)
            {
                while (bodyContentReader.IsStartElement(XmlRpcProtocol.Param) && paramCounter < parameters.Length)
                {
                    bodyContentReader.ReadStartElement();
                    if (bodyContentReader.IsStartElement(XmlRpcProtocol.Value))
                    {
                        bodyContentReader.ReadStartElement();
                        bodyContentReader.MoveToContent();
                        if (bodyContentReader.NodeType == XmlNodeType.Text)
                        {
                            parameters[paramCounter] = bodyContentReader.ReadContentAs(_parameterInfo[paramCounter].ParameterType, null);
                        }
                        else
                        {
                            parameters[paramCounter] = XmlRpcDataContractSerializationHelper.Deserialize(bodyContentReader, _parameterInfo[paramCounter].ParameterType);
                        }
                        bodyContentReader.ReadEndElement();
                    }
                    bodyContentReader.ReadEndElement();
                    bodyContentReader.MoveToContent();
                    paramCounter++;
                }
            }
            bodyContentReader.ReadEndElement();
            bodyContentReader.Close();
        }
        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);
        }