在WCF上发送Tuple对象?

时间:2010-04-28 20:21:08

标签: c# .net wcf serialization datamember

WCF的数据契约序列化程序是否支持System.Tuple类(即,我可以将Tuple个对象传递给WCF调用和/或作为部分或全部结果接收它们吗?

我发现this page,但不是明确的,明确的“你可以发送和接收带有WCF的元组”我希望的答案。

我猜你可以,只要数据合同序列化程序支持 Tuple本身的所有类型,任何人都可以为我提供更明确的权限回答?感谢。

3 个答案:

答案 0 :(得分:16)

Tuple类型标有SerializableAttribute,因此,如果您存储的类型是可序列化的,那么它们也应该能够由WCF序列化。

结帐:Tuple'1Tuple'2等的链接。它说:

[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple

请注意,您链接的文档包含以下行:

  

部分信任环境不支持[Serializable] / ISerializable编程模型。

所以,它可能不像看起来那么容易。

(顺便说一下,Tuple static class也值得一试。)

答案 1 :(得分:9)

我自己正在深入研究这个问题,如果您通过Silverlight使用WCF服务,似乎有一个问题:请参阅Davy Brion's blog了解更多信息。

Silverlight版本的Tuple没有Seri​​alizable属性,这在目前是个问题。

答案 2 :(得分:5)

我让Tuples与.NET 4.0和WCF很好地配合使用(提醒:你需要.NET 4.0来支持Tuple)。

这是单元测试方法(通过WCF层调用方法):

/// <summary>
/// Test Tuples
/// </summary>
[TestMethod()]
public void WcfTestTupleUnit()
{
  Tuple<double, double> x;
  x=CallViaWCF.testTuple();
  Assert.AreEqual(x.Item1, 42);
  Assert.AreEqual(x.Item2, 43);
}
#endregion

这是界面:

[OperationContract]
Tuple<double, double> testTuple();

以下是实施:

public Tuple<double, double> testTuple()
{
  return new Tuple<double, double>(42, 43);
}

我刚刚通过使用“WCF服务应用程序”(参见New..Project)进行调试来测试它,它为WCF服务提供服务。我使用这种方法进行调试,因为我可以使用调试器从WCF客户端无缝地步进到WCF服务,然后再返回,这有时非常有用。

我刚刚通过将它部署到控制台应用程序和服务应用程序来测试此方法,因此它绝对适用于我。