1. 程式人生 > >呼叫webserivce時報錯“對操作"方法名"的回覆訊息正文進行反序”

呼叫webserivce時報錯“對操作"方法名"的回覆訊息正文進行反序”

今天在工作中遇到這個問題。我就把它記錄下來。

在除錯的過程中發現問題:

       呼叫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的這個屬性,最終可以了。

原因就是這個欄位中的內容太多。所以造成報錯對操作“方法名”的回覆訊息正文進行反序。