2010-05-12 63 views
2

我開發了winforms應用程序。我的一個表單接受用戶輸入並調用Web服務將輸入添加到數據庫中。輸入必須是唯一的,但是我無法知道它在客戶端是否是唯一的。我將輸入發送給WS,並負責將其添加到數據庫或通知客戶端輸入已存在。如何從Web方法返回多個結果?

什麼是正確的方式來實現呢?

我應該對WS進行兩個調用,一個知道它是否是唯一的,另一個要插入到數據庫中?我感覺到同步問題+跨越邊界的兩次往返。

我應該返回一個枚舉,ValueNotUnique和ValueInsertedSuccessfully?

或者可能拋出異常?這聽起來不是性能明智的,再加上我不喜歡使用異常來處理我已經知道的可能無法工作的事情。

有沒有一個很好的設計,這混亂?幫助感謝,提前致謝!

回答

3

我可能會做這樣的事情:

  • 定義結果值的枚舉; ValueAlreadyExists,ValueInserted等
  • 定義返回的對象類型,其中將包括
    • 操作的結果,作爲枚舉類型
    • 如果該值已經存在 - 可能像一個ID,甚至一些數據
    • 如果該值插入成功,新的ID

所以你必須:

public enum OpResult 
{ 
    ValueInserted, 
    ValueAlreadyExists 
} 

和結果類型:

public class ResponseType 
{ 
    public OpResult Result { get; set; } 
    public int UniqueID { get; set; } 
} 

通過這種方法,你可以很容易地

  • 延長枚舉和增加更多的可能結果爲您的操作
  • 延長響應類型和如果您需要,可以添加更多信息
+0

謝謝,我喜歡那樣! – Rita 2010-05-12 20:49:46

0

您的web方法可以返回具有多個屬性的自定義類。 Web服務不需要僅返回基元或原子類型。標記自定義類可序列化,並確保任何屬性也可序列化等。

或者,如果您考慮未插入爲錯誤並在調用應用程序中捕獲異常的情況,則可以引發異常。

+1

*自定義類*也被稱爲*類*。 – Aaronaught 2010-05-12 20:44:21

+0

同意。在這裏使用「自定義」來向海報澄清,所述類是由海報/開發者定義的,而不是由框架提供的。 – David 2010-05-12 20:51:09

0

我會這樣做:

您發送請求到服務器。在那裏檢查值是否正確。如果它是正確的,則進行插入並將有效結果發送回客戶端。如果不正確,則發送錯誤消息。