2010-05-12 60 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

我会这样做:

您发送请求到服务器。在那里检查值是否正确。如果它是正确的,则进行插入并将有效结果发送回客户端。如果不正确,则发送错误消息。