Example #1
0
 protected override void ReadXml(XmlReader reader)
 {
     base.ReadXml(reader);
     reader.EnsureIsStartElement();
     //read to method node
     //reader.ReadStartElement();
     m_operation   = reader.LocalName;
     m_operationNS = reader.NamespaceURI;
     m_argsXml     = reader.ReadOuterXml();
     foreach (SoapHeader h in Headers)
     {
         if (String.Compare(h.HeaderNamespace, SoapConstant.SoapAddressingNS, StringComparison.OrdinalIgnoreCase) == 0)
         {
             if (h.Name == SoapConstant.SoapHeaderActionLocalName)
             {
                 m_actionAddress = h.Value.ToString();
             }
             else if (h.Name == SoapConstant.SoapHeaderToLocalName)
             {
                 m_toAddress = h.Value.ToString();
             }
         }
     }
     if (String.IsNullOrEmpty(m_actionAddress))
     {
         throw new ArgumentException("Miss Action address", "reader");
     }
     if (String.IsNullOrEmpty(m_toAddress))
     {
         throw new ArgumentException("Miss To address", "reader");
     }
 }
Example #2
0
        //public static SoapReturnMessage Create(string actionName, object result, Dictionary<string, object> outArgs, SoapHeader[] headers=null)
        //{
        //    SoapReturnMessage message = new SoapReturnMessage();
        //    if (headers != null)
        //    {
        //        foreach (SoapHeader header in headers)
        //        {
        //            message.AddHeader(header);
        //        }
        //    }
        //    message.m_action = actionName;
        //    message.m_result = result;
        //    message.m_outArgs = outArgs;
        //    return message;
        //}

        //public object ReadResult(MethodInfo method)
        //{
        //    // read to [Action]Result node
        //    XmlReader resultReader = m_responseReader.ReadSubtree();
        //    resultReader.ReadStartElement();
        //    if (!resultReader.IsStartElement())
        //    {
        //        throw new SerializationException("Message invalid!");
        //    }
        //    Type returnType = method.ReturnType;
        //    //TODO: check void
        //    return SoapSerializeHelper.ReadDataContract(resultReader, returnType);
        //}

        //public IReadOnlyDictionary<string, object> GetOutArgs(MethodInfo methodInfo)
        //{
        //    if (m_outArgs != null)
        //    {
        //        return new ReadOnlyDictionary<string, object>(m_outArgs);
        //    }
        //    return null;
        //}

        //public object ActionName
        //{
        //    get
        //    {
        //        return m_action;
        //    }
        //}

        protected override void ReadXml(XmlReader reader)
        {
            base.ReadXml(reader);
            reader.EnsureIsStartElement();
            m_actionResponseName = reader.LocalName;
            m_serviceNS          = reader.NamespaceURI;
            reader.ReadStartElement();
            if (reader.LocalName.EndsWith(SoapConstant.ActionResponseResultSuffix))
            {
                //m_result = SoapSerializeHelper.ReadDataContract(reader.ReadSubtree(), typeof(
            }
            string responseName = m_operationName + SoapConstant.ActionResponseNameSuffix;
            string resultName   = m_operationName + SoapConstant.ActionResponseResultSuffix;

            //if (!reader.ReadToDescendant(SoapConstrant.SoapBodyLocalName, SoapConstrant.SoapNS))
            //{
            //    throw new SerializationException("reader");
            //}
            ////read to method node
            //reader.ReadStartElement();
            //m_action = reader.LocalName;
            //if (m_action.EndsWith(SoapConstrant.ActionResponseSuffix))
            //{
            //    m_action = m_action.Substring(0, m_action.Length - SoapConstrant.ActionResponseSuffix.Length);
            //}
            //m_responseReader = reader.ReadSubtree();
        }
Example #3
0
        //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);
        }
Example #4
0
        protected virtual void ReadXml(XmlReader reader)
        {
            reader.EnsureIsStartElement();
            Name            = reader.LocalName;
            HeaderNamespace = reader.NamespaceURI;
            string mustUnderstand = reader.GetAttribute(SoapConstant.SoapHeaderMustUnderstandLocalName, SoapConstant.EnvelopeNS);

            if (!String.IsNullOrEmpty(mustUnderstand))
            {
                MustUnderstand = mustUnderstand == "1" ? true : false;
            }
            Value = reader.ReadInnerXml();

            //reader.ReadStartElement();
        }
Example #5
0
        protected virtual void ReadXml(XmlReader reader)
        {
            reader.EnsureIsStartElement();
            m_envelopeNS = reader.NamespaceURI;
            if (reader.LocalName != SoapConstant.EnvelopeLocalName)
            {
                throw new ArgumentException("Soap message should start with " + SoapConstant.EnvelopeLocalName + "!");
            }
            //read to Header or body
            reader.ReadStartElement();
            if (reader.LocalName == SoapConstant.SoapHeaderLocalName && reader.NamespaceURI == m_envelopeNS)
            {
                //header
                XmlReader headerReader = reader.ReadSubtree();
                headerReader.ReadStartElement();

                while (headerReader.IsStartElement())
                {
                    XmlReader hdrReader = headerReader.ReadSubtree();
                    //string headerXml = reader.readsReadOuterXml();
                    SoapHeader header = SoapHeader.Deserialize(hdrReader);
                    m_headers.Add(header);
                    headerReader.ReadEndElement();
                    //hdrReader = reader.ReadSubtree();
                }
                //end header and move to body
                //if header is empty
                if (reader.IsStartElement())
                {
                    reader.ReadStartElement();
                }
                else
                {
                    reader.ReadEndElement();
                }
            }
            if (reader.LocalName != SoapConstant.SoapBodyLocalName || reader.NamespaceURI != m_envelopeNS)
            {
                throw new ArgumentException("Miss body element!", "reader");
            }
            reader.ReadStartElement();
        }
Example #6
0
        protected override void ReadXml(XmlReader reader)
        {
            base.ReadXml(reader);
            reader.EnsureIsStartElement();
            //fault
            //if (reader.LocalName != SoapConstant.SoapFaultLocalName && String.Compare(reader.NamespaceURI, EnvelopeNS) != 0)
            //{
            //    throw new ArgumentException("Miss Fault element!", "reader");
            //}
            //to Code
            reader.ReadStartElement(SoapConstant.SoapFaultLocalName, EnvelopeNS);
            //to Code Value
            reader.ReadStartElement(SoapConstant.SoapCodeLocalName, EnvelopeNS);
            //to Code Value Content
            reader.ReadStartElement(SoapConstant.SoapCodeValueLocalName, EnvelopeNS);
            string valueString = reader.ReadContentAsString();

            FaultCode = GetCodeValue(valueString);
            reader.ReadEndElement();
            reader.ReadEndElement();
            //reason
            reader.ReadStartElement(SoapConstant.SoapReasonLocalName, EnvelopeNS);
            reader.ReadStartElement(SoapConstant.SoapReasonTextLocalName, EnvelopeNS);
            Reason = reader.ReadContentAsString();
            reader.ReadEndElement();
            reader.ReadEndElement();
            //detail
            reader.ReadStartElement(SoapConstant.SoapDetailLocalName, EnvelopeNS);
            Detail = reader.ReadInnerXml();
            reader.ReadEndElement();
            //end fault
            reader.ReadEndElement();
            //end body
            reader.ReadEndElement();
            //end envelope
            reader.ReadEndElement();
        }