2011-03-17 140 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