调用webserivce时报错“对操作"方法名"的回复消息正文进行反序”

来源:互联网 发布:刺客信条大革命优化 编辑:程序博客网 时间:2024/06/01 09:24

今天在工作中遇到这个问题。我就把它记录下来。

在调试的过程中发现问题:

       调用webservice的时候出现的问题;问题描述如下:

        报错内容:对操作“方法名”的回复消息正文进行反序列化时出错

我是这样考虑的。是不是传过来的webservice中的内容格式有问题?

然后我试着去使用 XmlSerializer 控制序列化生成 CDATA 内容(Serializing A String Within a CDATA Element ) 

这个类也记录下,以后用得到:

添加一个CDATA的类,

 public class CDATA : IXmlSerializable    {        private string _value;        /**/        /// <summary>        /// 默认构造函数        /// </summary>        public CDATA() { }        /**/        /// <summary>        /// 带参数构造函数        /// </summary>        /// <param name="value"></param>        public CDATA(string value)        {            this._value = value;        }        /**/        /// <summary>        ///         /// </summary>        public string Value        {            get { return _value; }        }        XmlSchema IXmlSerializable.GetSchema()        {            return null;        }        void IXmlSerializable.ReadXml(XmlReader reader)        {            /**/            /***** 如果此节点中包含有多个节点须使用此方法。**/            this._value = reader.ReadElementContentAsString();            /**/            /* **********/            //this.text = reader.ReadString();            // reader.Read();        }        void IXmlSerializable.WriteXml(XmlWriter writer)        {            writer.WriteCData(this._value);        }        /**/        /// <summary>        /// 重写 获取CData节点的 内容        /// </summary>        /// <returns></returns>        public override string ToString()        {            return this._value;        }        /**/        /// <summary>        /// 将 CDATA 对象隐式转换成 内容 字符串。        /// </summary>        /// <param name="element"></param>        /// <returns></returns>        public static implicit operator string(CDATA element)        {            return (element == null) ? null : element._value;        }        /**/        /// <summary>        /// 将 内容 对象隐式转换成 CDATA 字符串。        /// </summary>        /// <param name="text"></param>        /// <returns></returns>        public static implicit operator CDATA(string text)        {            return new CDATA(text);        }    }


 

调用方法如下:

[XmlElement("Content", Type = typeof(CDATA))]


 

 private CDATA _content = new CDATA();


  public CDATA Content{get{                return _content.Value;}set{_content = value;}}


 到最后还是出现同样的错误,没辙了,到gg上搜了下,百度知道中有个人提问这个同样的问题,我按它的回答设置了MaxReceivedMessageSize 这个属性 把它改大一点了。

但是还是不行,最后还是设置了maxStringContentLength的这个属性,最终可以了。

原因就是这个字段中的内容太多。所以造成报错对操作“方法名”的回复消息正文进行反序。