今天在工作中遇到这个问题。我就把它记录下来。
在调试的过程中发现问题:
调用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的这个属性,最终可以了。
原因就是这个字段中的内容太多。所以造成报错对操作“方法名”的回复消息正文进行反序。