我有一个暴露为我的WCF服务的OperationContract的方法,我想重做。以前的程序员写过类似的东西:
public ReportResultObject GetReport(string stringContainingParameters)
我想有一个更像这样的方法:
public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation)
由于WCF不允许重载方法而不在OperationContract中指定Name属性,并且我不想打破当前客户端,是否有这样的情况的命名约定?像GetReportV2或GetReportHeyUseMeInstead?
答案 0 :(得分: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,并且您应该在service和data合同级别通过名称空间进行版本控制。
答案 1 :(得分:1)
我会选择一些有意义的东西,让人们更有可能认出它并适当地使用它。
public ReportResultObject GetReportWithAdditionalInformation(...)
可能有点太多了!
我当然会避免GetReportV2
或类似。
答案 2 :(得分:1)
创建新的Operationalcontract并为其添加命名空间。然后让您的客户使用新合约通过命名空间的方式调用它。这将模拟版本控制。
答案 3 :(得分:0)
如果您的WCF服务是RESTful,那么传递bool includeAdditionalInformation
是否重要?