2010-05-21 35 views
5

我有一个WCF服务和Web客户端。 Web服务实现了一个SubmitOrders方法。 该方法需要一系列订单。问题是服务必须返回每个订单的结果数组 - true或false。将WCF参数标记为out或ref不会使 有意义。你会推荐什么?设计WCF接口:不出或参考参数

[ServiceContact] 
public bool SubmitOrders(OrdersInfo) 

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

好的。这只是我对WCF属性缺乏了解。谢谢大家的回答。 – 2010-05-21 13:10:01

回答

11

将WCF参数标记为out或ref没有意义。

输出参数也使WCF感。

你有什么建议?

我推荐使用out参数。


注意1:它会将您的输出参数移动到您的第一个参数上。

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

+0

我同意,我们已经在我们自己的服务中广泛使用它们。 您也可以将该方法标记为IsOneWay = False,并将您想要的任何数据的数组传回给调用者,而不仅仅是一个布尔值。 – 2010-05-21 13:03:33

+0

错误..我明白了。我认为WCF将该类串行化为消息 ,并且该消息被转移到服务。输出参数假设一些 返回消息给客户端 - 我是对吗? – 2010-05-21 13:05:28

+0

只是不要添加OneWayAttribute!默认值是请求/响应。 – Erup 2010-05-21 13:06:44

1

特殊的类,其中包含的顺序和真/假,或一个tupels数组。

2

那么,如果你想避免出和ref参数,你总是可以返回已成功提交的订单的ID数组。

+1

@Captain:我不确定WCF的具体情况,但SOAP服务可以使用“out”参数。我猜WCF支持,因为它至少在SOAP和TCP/IP中是有意义的。 – 2010-05-21 13:05:50

1

的方法看起来像:

public OrdersInfo SubmitOrders(OrderInfo orders){ 
} 

凡在OrderInfo的每个项目都会有一个SubmissionStatusInfo,如:

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

其中Status : Submitted, Failed, Error
Message:一个字符串,给出一些附加信息关于状态...

HTH

+0

您可以执行FaultException 。这是传递错误的“最佳实践”。 – Erup 2010-05-21 13:09:56

+0

是的,这更有意义... – Sunny 2010-05-21 13:15:02

3

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

[ServiceContact] 
public OrdersResult SubmitOrders(OrdersInfo) 

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

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

Order[] Orders;

+0

不需要创建另一个DataContract obj。只是作为输出参数传递。 – Erup 2010-05-21 13:07:45

+0

这两种解决方案都可以使用。这取决于设计他是否想要退出参数或返回复杂类型。 – Incognito 2010-05-22 11:24:59

2

同时添加DataMember是的,这是有道理的WCF操作返回一个out参数。作为响应,SOAP消息将包含传回的元素。

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

此外,您还需要在SubmitOrders使用OperationContractAttribute(不ServiceContractAttribute的)。 OK。

+0

谢谢。这只是一个错字这是不是copypaste,我只是简化了问题,并匆匆输入了代码。 – 2010-05-21 13:08:51