//public SoapCallMessage(XmlReader reader) //{ // ReadXml(reader); //} public object[] GetInArgs(MethodInfo method) { if (m_args == null) { Log.Default.Trace(string.Format(">>Create:{0}", method.Name)); StringReader stringReader = new StringReader(m_argsXml); XmlReader argsReader = XmlReader.Create(stringReader); argsReader.EnsureIsStartElement(); ParameterInfo[] paramsInfo = method.GetParameters(); object[] args = new object[paramsInfo.Length]; argsReader.ReadStartElement(); while (argsReader.IsStartElement()) { string argName = argsReader.LocalName; Log.Default.Trace(string.Format(">>argName:{0}", argName)); int i = 0; ParameterInfo pInfo = null; for (; i < paramsInfo.Length; i++) { if (paramsInfo[i].Name == argName) { pInfo = paramsInfo[i]; break; } } if (pInfo == null) { throw new Exception("pInfo is null!"); } if (!pInfo.IsOut) { Type type = pInfo.ParameterType; Log.Default.Trace(">>type:{0}", type.Name); if (type.HasElementType) { Log.Default.Trace(">>HasElementType"); //type = type.GetElementType(); Log.Default.Trace(">>el type:{0}", type.Name); } args[i] = SoapSerializeHelper.ReadDataContract(argsReader, type); } else { argsReader.ReadStartElement(); } } m_args = args; } return(m_args); }
protected override void WriteXml(XmlWriter writer) { base.WriteXml(writer); string codeValue = GetCodeString(FaultCode); //fault writer.WriteStartElement(SoapConstant.SoapFaultLocalName, EnvelopeNS); //code writer.WriteStartElement(SoapConstant.SoapCodeLocalName, EnvelopeNS); //value writer.WriteStartElement(SoapConstant.SoapCodeValueLocalName, EnvelopeNS); writer.WriteValue(codeValue); //end value writer.WriteEndElement(); //end code writer.WriteEndElement(); //reason writer.WriteStartElement(SoapConstant.SoapReasonLocalName, EnvelopeNS); writer.WriteStartElement(SoapConstant.SoapReasonTextLocalName, EnvelopeNS); writer.WriteAttributeString("xml", "lang", "", "en"); writer.WriteValue(Reason); writer.WriteEndElement(); //end reason writer.WriteEndElement(); //detail if (Detail != null) { writer.WriteStartElement(SoapConstant.SoapDetailLocalName, EnvelopeNS); try { //, null, SoapSerializeHelper.WriteDataContract(writer, Detail, "string", "http://schemas.datacontract.org/2004/07/WcfService3"); } catch (Exception ex) { Log.Default.LogException(ex); } writer.WriteEndElement(); } //end fault writer.WriteEndElement(); //end body writer.WriteEndElement(); writer.WriteEndElement(); }
protected override void WriteXml(XmlWriter writer) { base.WriteXml(writer); //writer Response writer.WriteStartElement(m_actionResponseName, m_serviceNS); if (m_result != null) { SoapSerializeHelper.WriteDataContract(writer, m_result, m_operationName + SoapConstant.ActionResponseResultSuffix, this.m_serviceNS); } if (m_outArgs != null) { foreach (KeyValuePair <string, object> outArg in m_outArgs) { SoapSerializeHelper.WriteDataContract(writer, outArg.Value, outArg.Key); } } //write end Response writer.WriteEndElement(); //write end body writer.WriteEndElement(); //write end Envelop writer.WriteEndElement(); }