设计WCF接口:没有out或ref参数

时间:2010-05-21 12:54:42

标签: c# .net

我有一个WCF服务和Web客户端。 Web服务实现一种方法SubmitOrders。 此方法采用订单集合。问题是服务必须返回一个数组 每个订单的结果 - 真或假。将WCF参数标记为out或ref不会 感。你会推荐什么?

[ServiceContact]
public bool SubmitOrders(OrdersInfo)

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

6 个答案:

答案 0 :(得分:11)

  

将WCF参数标记为out或ref毫无意义。

out参数在WCF中有意义。

  

你会推荐什么?

我建议使用参数。


注1:它会将您的out参数移动为您的第一个参数。

注意2:是的,您可以在WCF中返回具有复杂类型的对象。使用[DataContract]属性和属性为[DataMember]的属性标记您的类。

答案 1 :(得分:3)

使用复杂类型(具有DataContract属性的另一个类)作为回报。

喜欢

[ServiceContact]
public OrdersResult SubmitOrders(OrdersInfo)

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

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

同时在DataMember

上添加Order[] Orders;

答案 2 :(得分:2)

好吧,如果你想避免out和ref参数,你总是可以返回成功提交的订单ID的数组。

答案 3 :(得分:2)

是的,在WCF操作上返回 out参数是有意义的。响应时,SOAP消息将包含传回的元素。

MSDN上有关于数据传输的好内容:Specifying Data Transfer in Service Contracts

此外,您需要在SubmitOrders上使用 OperationContractAttribute (而不是ServiceContractAttribute)。

答案 4 :(得分:1)

保存顺序和真/假或特殊数组的特殊类。

答案 5 :(得分:1)

该方法如下:

public OrdersInfo SubmitOrders(OrderInfo orders){
}

其中OrderInfo中的每个项目都有一个SubmissionStatusInfo,如:

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

其中Status : Submitted, Failed, ErrorMessage:一个字符串,提供有关状态的其他信息......

HTH