呼叫webserivce時報錯“對操作"方法名"的回覆訊息正文進行反序”
阿新 • • 發佈:2019-01-01
今天在工作中遇到這個問題。我就把它記錄下來。
在除錯的過程中發現問題:
呼叫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的這個屬性,最終可以了。
原因就是這個欄位中的內容太多。所以造成報錯對操作“方法名”的回覆訊息正文進行反序。