我们有一个下游系统,一个 ERP 系统,它可以通过 SOAP 公开其表。它发布的 Web 服务通常具有 Create、Update 和 Delete 方法。然后,我们使用包含异步方法的 svcutil 在我们端生成代理。最后,我们在它前面放了一个 ACL,供其他系统交互。
我们还刚刚发现了一个重要的不变量——项目的成本计算信息不能由 ERP 系统本身以外的任何东西更新。然而,真正愚蠢的 API 将允许消费者这样做。
我解决这个问题的想法是对 WCF 代理进行子类化,并具有用于更新该 throw 的显式实现NotSupportedException
。不,这不会阻止开发人员生成自己的代理并执行此操作。但至少我们可以保证在通过我们的 ACL 时不会发生这种情况。
Update_Result Item_Port.Update(Update request)
{
throw new NotSupportedException();
}
对于异步方法,我可以这样做
Task<Update_Result> Item_Port.UpdateAsync(Update request)
{
throw new NotSupportedException();
}
或者
Task<Update_Result> Item_Port.UpdateAsync(Update request)
{
return Task.Factory.StartNew<Update_Result>(() =>
{
throw new NotSupportedException();
});
}
从异步的角度来看,哪个更“正确”?