2011-03-17 139 views
0

我正在重构一些SOAP和REST服务。 SOAP服务响应请求的实体,而没有其他。例如,GET返回请求的实体的XML表示。对于错误,他们会抛出标准异常。 REST服务具有相同的行为。我从SOAP服务中返回什么以及如何返回?

我修改REST服务扔WebApplicationExceptions并返回相应的HTTP代码(例如HTTP 201成功后,而不是总是返回HTTP 200)。我对SOAP不熟悉,所以我想问什么,如果有的话,需要改变。

什么是SOAP各地的最佳实践:成功和错误的情况下

1)返回HTTP代码(如返回POST /创建请求HTTP 201)?如果是这样,怎么样?

2)抛出异常?你是否抛出所有的错误,包括服务调用者发送的无效数据?它应该是一个SOAP异常还是一个WebApplicationException?

我期待着您的反馈。

回答

2

SOAP被制成传输层的功能独立。尽管您没有使用它,但SOAP能够通过不同的协议(如SMTP)发送。因此,最好的做法将决定了

1)你不应该在一切都在你返回消息返回HTTP代码。事实上,你可能无法做到。成功/错误消息通常将在自定义SOAP头或响应主体中定义(响应主体方法更简单)。

2)每个异常,由Web服务抛出应该是一个SOAP异常。这样,客户端可以解释SOAP异常并采取适当的行动。

+0

感谢您的反馈。有几个问题我无法从您的回复中回答。你是否会抛出所有错误的例外(例如传入数据时失败的守卫子句)?而且,你会抛出SOAP异常还是WebApplicationException? – TERACytE 2011-03-17 17:12:42

+0

您返回给客户端的所有异常都应该是SoapException类型。什么构成例外,什么不是设计决定。例如,如果SOAP请求包含主键并且在数据库中找不到该键,那么作为SOAP响应中标记的错误可能更合适。另一方面,如果数据库连接处于关闭状态,则可能值得使用SOAP异常。它类似于一个方法:为了指示错误,你可以抛出一个异常或返回一个表示错误的响应值,并留给客户端解释。 – Bleaourgh 2011-03-17 17:18:45

+0

+1特别是#2。返回一个无SOAP的500(如果输入的XML格式错误,但有时只返回一个SOAP异常),Microsoft SharePoint将“不同”。最令人讨厌的是。 – 2011-03-17 17:29:20