修复 ︰ 返回的类型或包含具有内部的 setter 的属性 ASMX 服务方法的输出参数可能不会在已安装.NET Framework 的计算机上序列化

重要说明:本文是由 Microsoft 机器翻译软件进行的翻译并可能由 Microsoft 社区通过社区翻译机构(CTF)技术进行后期编辑,或可能是由人工进行的翻译。Microsoft 同时向您提供机器翻译、人工翻译及社区后期编辑的文章,以便对我们知识库中的所有文章以多种语言提供访问。翻译的文章可能存在词汇、句法和/或语法方面的错误。Microsoft 对由于内容的误译或客户对内容的使用所导致的任何不准确、错误或损失不承担责任。

点击这里察看该文章的英文版: 952883
症状
请考虑下面的方案。具有 Microsoft.NET Framework 2.0 Service Pack 2 (SP2) 的计算机,或安装.NET Framework 3.5 SP1。使用 ASMX 服务方法,包含一个属性,并且该属性具有内部的资源库。序列化可能会失败。在类似于以下情况下发生此问题 ︰
  • 公共类型 T 包含具有公共 getter 和内部设置的公共属性。例如,源代码可能如下所示。
    public class T{                …                public <Type> <Propertyname1> { get; internal set; }                …}
  • 在 Web 服务、 返回类型或出至少一个 Web 服务方法的参数返回类型 T 的对象或对象及其对象图中包含 T。例如,源代码可能类似于以下示例之一。
    • public T MyWebMethod(…){                …}
    • public void MyWebMethod(…, out U){                …}...public Class U{                public T <Propertyname2>  { get; set; }}
  • 键入 T 或类型 U 不用作任何 Web 服务方法中非出-仅限参数。

    注意:如果某个方法具有多个 out 参数,输出参数被称为非出-仅限参数。
  • 具有内部的 setter 的类型不是属性的可枚举集合
  • 应用.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 服务方法的输出参数不能序列化。此 Web 服务方法是类型为 T 的对象或对象及其对象图中包含 T。

注意:目前,没有单独针对.NET Framework 2.0 SP2 程序包。.NET Framework 2.0 SP2 的.NET Framework 3.5 SP1 包含在包中。
解决方案

修补程序替换信息

对应于 KB952883has 的热修复程序已取代了该修补程序 KB976814,其中包含以前在 KB952883 中包含的所有修复程序。您应该使用 hotfixKB976814 来修复 KB952883 中描述的问题。 有关详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
976814 修复 ︰ System.InvalidOperationException 异常发生时使用 WCF 客户端代理的生成在.NET Framework 3.5 的服务元数据中的 ServiceModel 元数据实用程序工具的
状态
Microsoft 已经确认这是"适用于"一节中列出的 Microsoft 产品中的问题。
参考
有关软件更新术语的详细信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
824684 用来描述 Microsoft 软件更新的标准术语的说明

警告:本文已自动翻译

属性

文章 ID:952883 - 上次审阅时间:04/10/2016 03:24:00 - 修订版本: 2.0

Microsoft .NET Framework 2.0, Microsoft .NET Framework 3.5

  • kbexpertiseadvanced kbfix kbqfe kbmt KB952883 KbMtzh
反馈