2010-05-12 6 views
2

Я разрабатываю winforms приложение. Одна из моих форм принимает вход пользователя и вызывает веб-службу для добавления ввода в БД. Вход должен быть уникальным, но я не знаю, уникален ли он на стороне клиента. Я отправляю вход в WS и отвечает за добавление его в БД или информирование клиента о том, что вход уже существует.Как вернуть несколько результатов из веб-метода?

Каков правильный способ его реализации?

Должен ли я сделать два вызова WS, один из них, чтобы узнать, является ли он уникальным, и один для вставки в БД? Я ощущаю проблемы синхронизации + две круглые поездки по границе.

Должен ли я вернуть перечисление, ValueNotUnique и ValueInsertedSuccessfully?

Или, может быть, исключение? Это звучит не так, как с точки зрения производительности, и я не люблю использовать исключения для вещей, которые я уже знаю, которые могут не сработать.

Есть ли хороший дизайн для этого беспорядка? Помогите оценить, спасибо заранее!

ответ

3

я бы, вероятно, сделать что-то вроде этого:

  • определяет перечень значений результата; ValueAlreadyExists, ValueInserted и т.д.
  • определить тип объекта возврата, который будет включать в себя
    • в результате операции, так как этот тип перечислений
    • если значение уже существует - возможно, что-то вроде удостоверения личности или даже некоторые из данные
    • , если значение было вставлено успешно, новый ID

Таким образом, вы бы:

public enum OpResult 
{ 
    ValueInserted, 
    ValueAlreadyExists 
} 

и тип результата:

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

При таком подходе вы можете легко

  • расширить перечень и добавить больше возможных результатов для работы
  • расширить тип ответа и добавьте дополнительную информацию, если вам это нужно
+0

Спасибо, мне это нравится! – Rita

0

Ваш веб-метод может возвращать пользовательский класс с несколькими свойствами. Веб-службы не обязаны возвращать примитивные или атомные типы. Отметьте пользовательский класс Serializable и убедитесь, что любые свойства также сериализуемы и т. Д.

В качестве альтернативы вы можете исключить исключение, если учесть случаи, когда вы не вставляли ошибки, и улавливали исключение в вызывающем приложении.

+1

A * пользовательский класс * также известен как * класс *. – Aaronaught

+0

Согласовано. Использование «custom» здесь разъясняет плакату, что указанный класс определяется плакатом/разработчиком, а не одним, предоставленным каркасом. – David

0

Я бы сделал это следующим образом:

Вы отправляете запрос на сервер. Там вы проверяете правильность значения. Если это правильно, вы вставляете и отправляете верный результат клиенту. Если это неверно, вы отправляете сообщение об ошибке.

Смежные вопросы