如何从Web方法返回多个结果?

时间:2010-05-12 20:38:53

标签: c# .net web-services

我开发了winforms app。我的一个表单接受用户输入并调用Web服务以将输入添加到DB中。输入必须是唯一的,但我无法知道它在客户端是否是唯一的。我将输入发送到WS,它负责将其添加到数据库或通知客户端输入已存在。

实施该方法的正确方法是什么?

我应该对WS进行两次调用,一次是知道它是唯一的还是要插入到数据库中的一次?我感觉到同步问题+跨越两次往返行程。

我应该返回枚举,ValueNotUnique和ValueInsertedSuccessfully吗?

或者抛出异常?这听起来不是性能明智的,而且我不喜欢使用我已经知道的可能不起作用的异常。

这个混乱有一个很好的设计吗?感谢提前感谢!

3 个答案:

答案 0 :(得分:3)

我可能会这样做:

  • 定义结果值的枚举; ValueAlreadyExists,ValueInserted等。
  • 定义包含的返回对象类型
    • 操作的结果,如枚举类型
    • 如果价值已存在 - 可能是ID或某些数据
    • 如果成功插入了值,则为新ID

所以你有:

public enum OpResult
{
   ValueInserted,
   ValueAlreadyExists
}

和结果类型:

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

使用这种方法,您可以轻松

  • 扩展枚举并为您的操作添加更多可能的结果
  • 扩展响应类型并在需要时添加更多信息

答案 1 :(得分:0)

您的网络方法可以返回具有多个属性的自定义类。 Web服务不需要仅返回原始类型或原子类型。标记自定义类Serializable并确保任何属性也可序列化等。

或者,如果您考虑未插入错误的情况并在调用应用程序中捕获异常,则可以抛出异常。

答案 2 :(得分:0)

我会按以下方式进行:

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