在WCF上发送Tuple对象?

Don*_*nut 15 .net c# wcf serialization datamember

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

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

我猜,你可以,只要所有类型的范围内Tuple本身是由数据协定序列化支持-谁能给我提供了更明确的答案?谢谢.

Ven*_*emo 16

Tuple类型标有SerializableAttribute,因此,如果您存储中的类型是序列化的,他们应该能够通过WCF也连载.

退房:Tuple'1,Tuple'2等的链接它说:

[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


And*_*son 9

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

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


Con*_*ngo 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
Run Code Online (Sandbox Code Playgroud)

这是界面:

[OperationContract]
Tuple<double, double> testTuple();
Run Code Online (Sandbox Code Playgroud)

这是实施:

public Tuple<double, double> testTuple()
{
  return new Tuple<double, double>(42, 43);
}
Run Code Online (Sandbox Code Playgroud)

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

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