2009-05-22 204 views
2

我有一个方法公开为我的WCF服务的OperationContract,我想返工。以前的程序员写了类似:WCF扩展方法的命名约定

public ReportResultObject GetReport(string stringContainingParameters) 

我想有一个方法,那就是更多的东西是这样的:

public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation) 

由于WCF犯规允许重载方法没有在指定名称属性OperationContract,我不想打破目前的客户,是否有这样的情况命名约定?像GetReportV2或GetReportHeyUseMeInstead?

+0

合同中的名称属性有什么问题? – 2009-05-22 13:45:16

+0

没有什么是真的,除了我希望程序员有一种方法,无论他们是脱离WSDL还是仅仅使用ChannelFactory方法,以便能够区别仅在较老的客户端中使用的方法,以及应该是用于新客户。 – 2009-05-22 13:56:42

回答

1

我会选择一些有意义的东西,使人们更容易识别并恰当地使用它。

public ReportResultObject GetReportWithAdditionalInformation(...) 

虽然可能有点太多!

我肯定会避免GetReportV2或类似的。

0

如果你的WCF服务是RESTful的,如果bool includeAdditionalInformation被传递或没有通过,那么它有关系吗?

6

通过再次做同样的事情,当你需要添加另一个参数时,你只需要为自己设置相同的“混乱”。我强烈建议你看看有一个参数是数据合同;

public ReportResultObject GetReportTheSuperDooperWay(
    GetReportParameters parameters) 

这会给你什么?那么

[DataContract] 
public class GetReportParameters 
{ 
[DataMember(IsRequired=false)] 
public string parameters; 

[DataMember(IsRequired=false)] 
public int[] someIds; 

[DataMember(IsRequired=false)] 
bool includeAdditionalInformation 
} 

因此,因为每个字段是可选的,你可以添加新的字段,而不会破坏现有的客户端。这是一个相当简单的例子,因为您也需要实施IExtensibleDataObject,您应该通过servicedata合同级别的命名空间进行版本控制。

1

创建一个新的操作合同并为其添加一个命名空间。然后让你的客户使用新的合同,通过命名空间来调用它。这将模拟版本控制。