在WCF上发送Tuple对象?

WCF的Data Contract Serializer是否支持System.Tuple类(即,我可以将Tuple对象传递给WCF调用和/或作为部分或全部结果接收它们)吗?

我找到了这个页面 ,但不是明确的,明确的“你可以发送和接收带有WCF的元组”我希望的答案。

我猜你可以,只要Tuple本身的所有类型都受到Data Contract Serializer的支持 – 有人能为我提供更明确的答案吗? 谢谢。

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

查看: Tuple’1 , Tuple’2等链接。它说:

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

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

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

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

(顺便说一句, Tuple静态类也值得一试。)

我本人只是在深入研究这个问题,如果您通过Silverlight使用WCF服务,似乎有一个问题:请参阅Davy Brion的博客了解更多信息。

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

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

这是unit testing方法(通过WCF层调用方法):

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

这是界面:

 [OperationContract] Tuple testTuple(); 

这是实施:

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

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

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