修复:包含具有内部 setter 的属性的 ASMX 服务方法的返回类型或 out 参数可能无法在安装了 .NET Framework 的计算机上序列化

请考虑以下情形。 你的计算机安装了 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软件更新的标准术语说明

参考资料