2011-10-12 68 views
2

我有一个包含3类Web服务项目:访问继承类的web服务

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

在我的项目(Test.csproj),我添加了一个Web引用上面提到的网络服务,并把它命名为DAL。

当我试图从我的测试项目访问例如“BaseClass”,我编写Test.DAL.BaseClass,它会识别它。

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

回答

2

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

1

您是否将WCF用于Web服务?

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

Data Contract Known Types

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

的Web服务是不是真的一样WCF,但我发现,很多人使用术语互换。

+0

你错了。术语“Web服务”是通用的。它包括ASMX Web服务以及WCF。 –

+1

@JohnSaunders如果我误以为你说网络服务*和WCF一样?或者我的答案在其他方面不正确?包括OP可能不使用WCF的声明是否是错误的? –

+0

您的陈述“Web服务与WCF不是一回事”做出错误区分。 –