请考虑以下情形。 你的计算机安装了 Microsoft .NET Framework 2.0 Service Pack 2 (SP2) 或 .NET Framework 3.5 SP1。 您使用包含属性的 ASMX 服务方法,并且该属性具有内部 setter。 序列化可能会失败。 此问题发生在类似于以下情形的场景中:
公共类型 T 包括具有公共 getter 和内部 setter 的公共属性。 例如,源代码可能类似于以下内容。
public class T { … public <Type> <Propertyname1> { get; internal set; } … }在 Web 服务中,至少一个 Web 服务方法的返回类型或 out 参数返回 T 类型的对象或者在其对象图中包含 T 的对象。 例如,源代码可能类似于以下示例之一。
-
public T MyWebMethod(…) { … } -
public void MyWebMethod(…, out U) { … } ... public Class U { public T <Propertyname2> { get; set; } }
-
类型 T 或类型 U 在任何 Web 服务方法中均不用作非仅输出参数。
注意 如果方法有多个 out 参数,则 out 参数称为非仅 out 参数。
具有内部 setter 的属性的类型不是 Enumerable 或 Collection。
在应用 .NET Framework 2.0 SP2 或 .NET Framework 3.5 SP1 之前,已使用 Wsdl.exe 工具或 Visual Studio 添加 Web 引用功能为上述 Web 服务生成了代理代码。
部署 Web 服务和客户端后,应用了 .NET Framework 2.0 SP2 或 .NET Framework 3.5 SP1。
在这种情况下,不会序列化上述 Web 服务方法的返回类型或 out 参数。 此 Web 服务方法是 T 类型的对象或在其对象图中包含 T 的对象。
注意 目前,没有针对 .NET Framework 2.0 SP2 的单独程序包。 适用于 .NET Framework 3.5 SP1 的程序包中包含 ..NET Framework 2.0 SP2。
症状
修补程序替换信息
与 KB952883 对应的修补程序已被修补程序KB976814取代,修补程序包含以前包含在 KB952883 中的所有修补程序。 你应该使用修补程序KB976814来修复 KB952883 中描述的问题。 有关更多信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
976814修复:使用 WCF 客户端代理(由 ServiceModel 元数据实用工具工具根据 .NET Framework 3.5 中的服务元数据生成)时发生 System.InvalidOperationException 异常
解决方法
Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。
状态
有关软件更新术语的更多信息,请单击下面的文章编号以查看 Microsoft 知识库中的相应文章:
824684 用于描述Microsoft软件更新的标准术语说明