Разработка интерфейса WCF: нет параметров out или ref - PullRequest
5 голосов
/ 21 мая 2010

У меня есть сервис WCF и веб-клиент. Веб-сервис реализует один метод SubmitOrders. Этот метод принимает коллекцию заказов. Проблема в том, что сервис должен возвращать массив результатов для каждого заказа - истина или ложь. Маркировка параметров WCF как out или ref делает no смысл. Что бы вы порекомендовали?

[ServiceContact]
public bool SubmitOrders(OrdersInfo)

[DataContract]
public class OrdersInfo
{
  Order[] Orders;
}

Ответы [ 6 ]

11 голосов
/ 21 мая 2010

Маркировка параметров WCF как out или ref не имеет смысла.

наши параметры имеют смысл в WCF.

Что бы вы порекомендовали?

Рекомендую использовать параметры.


Примечание 1: Ваш параметр out будет перемещен в качестве первого параметра на вас.

Примечание 2: Да, вы можете возвращать объекты со сложными типами в WCF. Пометьте свой класс атрибутом [DataContract], а ваши свойства - атрибутом [DataMember].

3 голосов
/ 21 мая 2010

Используйте сложный тип (другой класс с атрибутом DataContract) в ответ.

Как

[ServiceContact]
public OrdersResult SubmitOrders(OrdersInfo)

[DataContract]
public class OrdersInfo
{
  Order[] Orders;
}

[DataContract]
public class OrdersResult
{
  .....
}

Также добавьте DataMember на Order[] Orders;

2 голосов
/ 21 мая 2010

Да, имеет смысл возвращать out параметр для операций WCF. При ответе сообщение SOAP будет содержать элемент, переданный обратно.

На MSDN имеется хороший контент о передаче данных: Указание передачи данных в договорах на обслуживание

Кроме того, вам нужно использовать OperationContractAttribute (не ServiceContractAttribute) в SubmitOrders.

2 голосов
/ 21 мая 2010

Что ж, если вы хотите избежать параметров out и ref, вы всегда можете вернуть массив идентификаторов заказов, которые были успешно отправлены.

1 голос
/ 21 мая 2010

Метод будет выглядеть так:

public OrdersInfo SubmitOrders(OrderInfo orders){
}

, где каждый элемент в OrderInfo будет иметь SubmissionStatusInfo, например:

class SubmissionStatusInfo{
 enum Status  { get; set; }
 string Message { get; set; }
}

, где Status : Submitted, Failed, Error и т. Д.
Message: строка, дающая некоторую дополнительную информацию о статусе ...

НТН

1 голос
/ 21 мая 2010

Специальный класс, который содержит порядок и true / false, или массив tupels.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...