我正在使用单个PUT操作构建WCF REST服务。目的是通过添加或减去资金来更新帐户余额。 PUT操作可以做出两个主要响应:
AccountUpdate
对象被序列化回调用者,其中包含新的帐户余额信息。AccountError
对象被序列化回调用者,该调用者指出了问题(通常是"帐户透支"消息)。以上是客户期望的返回值。如果这是ASP.NET Web API,那么这项服务很容易实现。
但是,对于WCF REST,我不确定我应该为同一服务操作提供两种不同的返回类型。以下是示例代码:
public AccountUpdate PutSomething([Safe] Funding funding)
{
if (HandleFunds(funding)){
//**** Handle a 200 "OK" ****
return new AccountUpdate(...);
}else{
//**** Handle a 409 "Conflict" ****
OutgoingWebResponseContext response = WebOperationContext.Current.OutgoingResponse;
response.StatusCode = HttpStatusCode.Conflict;
return new AccountError(...);
}
}
上面的代码不会编译,因为AccountError
与AccountUpdate
不是多态的。
使用WCF REST处理这种情况是否有适当的惯用方法?我应该让我的服务操作只返回object
吗?
我可以解决这个问题的一种方法是做一个throw new WebFaultException<AccountError>
,但这似乎是处理正常业务流程的一种尴尬方式。
思想?
答案 0 :(得分:0)
我会通过在AccountUpdate类中包含Succeeded位和ErrorMessage字符串来处理此问题。此类似乎仅用于更新帐户,而不用于存储帐户数据。因此,返回AccountUpdate对象也应返回该更新的结果。您甚至可以让AccountUpdate包含&#34;结果&#34;包含所需数据的类。