2014-08-28 65 views
0

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

WebMethod1(Class1 param) 
{ 
    return Class 2; 
} 

的Class1和2类被包括在WSDL,但被内的Class1或2类引用的任何类不包含在WCF的WSDL。但是,他们在asmx WSDL中。

是否有任何方式暴露这些必需的类而不更改类本身或Web服务中的代码?我知道你可以将[DataContract]等添加到类中,但我发现很难相信WCF在这方面不应该提供与asmx相同的功能。

感谢

回答

3

不需要DataContract不是ASMX的力量,或者需要DataContract不是WCF的弱点。这是WCF设计的很多理由,其中之一就是你应该向外界公布最少的信息。对于大型Web服务项目,这是一个祝福,而不是限制。客户不希望看到服务类的详细信息。

服务数据类,以便成为在客户端代理类只有当这些条件都满足通过WSDL出版:

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