设计WCF合同(操作/数据)

时间:2010-06-25 14:56:29

标签: c# wcf soap datacontract operationcontract

我目前正在寻求设计一些WCF服务,并希望得到社群对处理运营/数据合同的最佳方式的意见。

我有2个基本操作合约,第一个创建报价,第二个将一个项目添加到报价(并计算场景后面的总数)。

第一个接收客户信息商店信息返回报价

第二个接受报价项目对象,计算合计数,返回带项目的报价。

我的问题是如何在这种情况下设计数据合同?

对于 CreateQuote ,是否应该使用客户属性和商店属性集传入引用对象,或者是否应该存在某种包含客户&的QuoteRequest对象。存储对象但没有传入引用对象?

对于 AddQuoteItem ,应该使用包含Quote对象的必需属性集传递QuoteItem对象,还是应该有一个具有Quote对象和item对象的QuoteItemRequest对象(没有关系)然后返回带有QuoteItem对象的重新计算的引用?

换句话说,他们应该看起来像这样吗?

Quote CreateQuote(Quote quote);

Quote AddQuoteItem(QuoteItem quoteItem);

或者他们应该看起来像这样?

Quote CreateQuote(QuoteRequest quoteRequest);

Quote AddQuoteItem(QuoteItemRequest quoteItemRequest);

1 个答案:

答案 0 :(得分:2)

我认为将它们包装在请求/响应包装器中可能会证明有点多余。您始终可以假定WCF服务方法的参数是“请求”,返回类型是“响应”。

在您的方案中,将Customer类型和Store类型传递给CreateQuote方法并返回Quote类型。然后传递一个Quote类型并再次返回你的Quote类型,或者返回一个指示成功的bool到AddQuoteItem方法。

再次在您的场景中,您的请求/响应类只是围绕单个类型的一级包装器。我只能设想一个场景,你会返回一个response-esque类来包装方法的单个返回值中的多个不同类型。