0

在添加/更新实体时,我无法定义我OperationContract应该是什么。我想ObjectContext通过 WCF 服务发送一个实体(或实体列表)(这将为我实例化一个业务管理器以进行实际验证)。

如果实体通过了所有验证规则(这很可能需要查询数据库以确定更复杂的业务规则的通过/失败),它将被保存到数据库中,我需要能够传回它的 ID(身份列主键)和并发令牌的值(时间戳列),但如果它失败了,显然我们希望有一条或多条消息说明出了什么问题。在更新的情况下,我们需要的只是并发令牌的新值,但我们同样需要验证消息。

为了使它更棘手,一个实体也可以有多个子/孙实体。例如,行程将有止损,可能有订单。

我只是想知道人们如何在现实世界中处理这个问题。最简单的示例仅显示 WCF 服务的操作,例如:

[OperationContract]
bool AddEntity(Entity e);

[OperationContract]
bool UpdateEntity(Entity e);

有没有人有任何处理这个的好主意?我想我真的只是在这里寻找实用的建议。

我们是否应该尝试在一个服务调用中保存一组对象?

我们是否应该通过故障合约来传达验证消息?

任何建议/意见都会有所帮助,谢谢!

4

1 回答 1

0

我们是否应该尝试在一个服务调用中保存一组对象?

如果您的意思是一次调用保存整个对象图,那么答案肯定是肯定的。如果您的意思是在一次调用中保存多个独立的对象图(集合),那么答案可能是肯定的。将客户端和服务之间的往返次数减少到最低限度是个好主意,但同时这样做会带来复杂性。您必须决定是否必须将整个集合保存为原子操作,或者您是否对仅保存集合的一部分并为其余部分返回错误感到满意。这将影响您架构的其余部分。

我们是否应该通过故障合约来传达验证消息?

是的,但前提是您将保存操作用作原子操作,因为故障契约是异常,并且异常应该会破坏您当前的操作并仅返回验证错误。拥有单个故障合约就足够了,它将转移所有验证错误。不要为每个验证错误触发异常,因为它会使您的应用程序非常烦人且无用。

如果您只想保存通过验证的部分集合并为其余部分返回错误,则不应使用故障契约。您应该使用一些用于响应的容器数据合约而不是错误合约,该合约将携带已保存数据的 id 和时间戳以及未保存数据的 id 和错误。

给 STE 的一个小提示:只传回 ID 和时间戳可能很棘手。我不确定您是否不必在设置跟踪时关闭跟踪,然后再次打开跟踪。

于 2011-06-17T08:47:19.423 回答