System.Tuple
类是否受WCF的数据合同序列化器支持(即,我可以将Tuple
对象传递给WCF调用和/或作为结果的一部分或全部接收)?
我找到了这个页面,但没有明确、确定的“您可以使用WCF发送和接收元组”的答案。
我猜想只要Tuple
内部的所有类型都受数据合同序列化器支持,就可以这样做。有人能给我提供更明确的答案吗?谢谢。
System.Tuple
类是否受WCF的数据合同序列化器支持(即,我可以将Tuple
对象传递给WCF调用和/或作为结果的一部分或全部接收)?
我找到了这个页面,但没有明确、确定的“您可以使用WCF发送和接收元组”的答案。
我猜想只要Tuple
内部的所有类型都受数据合同序列化器支持,就可以这样做。有人能给我提供更明确的答案吗?谢谢。
Tuple
类型标有SerializableAttribute
,因此,如果您存储的类型是可序列化的,则它们应该也能够被WCF序列化。
[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
[Serializable] / ISerializable编程模型在部分信任环境中不受支持。
因此,这可能不像看起来那么容易。
(顺便说一下,Tuple static class 也值得一看。)
我刚刚自己研究了一下,似乎问题可能出在如果您通过Silverlight使用WCF服务:请参见Davy Brion的博客获取更多信息。
Tuple的Silverlight版本没有Serializable属性,这在目前是一个问题。
我已经成功地在.NET 4.0和WCF中使用元组(提醒:您需要.NET 4.0才能支持元组)。
以下是单元测试方法(通过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服务,然后再返回,这在某些时候非常有用。
我还通过将其部署到控制台应用程序和服务应用程序中进行了测试,所以对我来说肯定有效。