WCF WSDL不公开所需的类

时间:2014-08-28 13:29:25

标签: c# web-services wcf wsdl

我正在将asmx Web服务升级到WCF。 asmx wsdl公开了客户端所需的某些类。这些类不在Web方法本身中引用,但它们是Web方法中的类中的引用。例如:

WebMethod1(Class1 param)
{
     return Class 2;
}

Class1和Class 2包含在wsdl中,但是在Class1或Class 2中引用的任何类都不包含在WCF的WSDL中。但是,它们位于asmx WSDL中。

有没有办法在不更改类本身或Web服务中的代码的情况下公开这些必需的类?我知道你可以将[DataContract]等添加到类中,但我发现很难相信WCF在这方面不应该提供与asmx相同的功能。

由于

1 个答案:

答案 0 :(得分:3)

不要求DataContract不是asmx的强大功能,或者要求DataContract不是WCF的弱点。这是WCF的设计,原因很多,其中之一就是你应该向外界发布最少的信息。对于大型Web服务项目,这是一种祝福,而不是限制。客户不希望看到您的服务类的详细信息。

服务数据类是通过WSDL发布的,只有在满足这些条件时才能成为客户端的代理类:

  1. 该类由DataContractAttribute修饰,只发布由DataMemberAttribute修饰的属性/数据字段。复合结构中的嵌套类也需要这样的装饰。
  2. 该类至少在一个服务合同的操作合同中被引用。