【问题标题】:Access inherited class in a web service访问 Web 服务中的继承类
【发布时间】:2011-12-05 19:04:58
【问题描述】:

我有一个包含 3 个类的 Web 服务项目:

  • 1 抽象公共类 (BaseClass.cs)
  • 和 2 个从它继承的公共类(InheritedClassA.cs 和 InheritedClassB.cs)

在我的项目 (Test.csproj) 中,我添加了对上述 Web 服务的 Web 引用,并将其命名为 DAL。

当我尝试从我的测试项目中访问例如“BaseClass”时,我编写了 Test.DAL.BaseClass,它可以识别它。

当我尝试做同样的事情来访问我的测试项目中的任何继承类(InheritedClassA 和 InheritedClassB)时,它不起作用。

【问题讨论】:

    标签: c# web-services inheritance


    【解决方案1】:

    您需要通过在方法中返回这些类的实例来告诉服务使用类 InheritedClassA 和 InheritedClassB,或者使用 XmlInclude 在引用中包含未使用的类。进行任何这些更改后,请务必更新您的网络参考。

    【讨论】:

      【解决方案2】:

      您是否将 WCF 用于您的 Web 服务?

      如果您使用的是DataContractSerializer(如果您使用的是 WCF,您可能会这样做),那么您希望使用 KnownType 属性在服务描述中包含类型。

      Data Contract Known Types

      [DataContract]
      [KnownType(typeof(InheritedClassA))]
      [KnownType(typeof(InheritedClassB))]
      public abstract class BaseClass
      {
          // properties
      }
      

      Web 服务与 WCF 并不完全一样,但我发现很多人可以互换使用这些术语。

      【讨论】:

      • 你错了。术语“Web 服务”是通用的。它包括 ASMX Web 服务以及 WCF。
      • @JohnSaunders 如果我弄错了,您是说 Web 服务 与 WCF 相同吗?还是我的答案在其他方面不正确?包含 OP 可能未使用 WCF 的免责声明是不是我错了?
      • 您的陈述“Web 服务与 WCF 并不完全相同”造成了错误的区分。
      猜你喜欢
      • 2017-09-05
      • 2011-05-29
      • 1970-01-01
      • 2019-05-16
      • 2011-04-18
      • 2017-09-01
      • 1970-01-01
      • 2012-04-05
      • 1970-01-01
      相关资源
      最近更新 更多