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); }