WCF 的 Data Contract Serializer是否System.Tuple
支持该类(即,我可以将Tuple
对象传递给 WCF 调用和/或将它们作为部分或全部结果接收)吗?
我找到了这个页面,但不是我希望的明确、明确的“您可以使用 WCF 发送和接收元组”的答案。
我猜你可以,只要 Data Contract Serializer 支持自身中的所有类型——谁能Tuple
给我一个更明确的答案?谢谢。
WCF 的 Data Contract Serializer是否System.Tuple
支持该类(即,我可以将Tuple
对象传递给 WCF 调用和/或将它们作为部分或全部结果接收)吗?
我找到了这个页面,但不是我希望的明确、明确的“您可以使用 WCF 发送和接收元组”的答案。
我猜你可以,只要 Data Contract Serializer 支持自身中的所有类型——谁能Tuple
给我一个更明确的答案?谢谢。
这些Tuple
类型用 标记SerializableAttribute
,因此,如果您存储的类型是可序列化的,那么它们也应该能够被 WCF 序列化。
[SerializableAttribute]
public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
请注意,您链接的文档包含以下行:
[Serializable] / ISerializable 编程模型在部分信任环境中不受支持。
因此,它可能并不像看起来那么容易。
(顺便说一句,元组静态类也值得一试。)
我自己只是在深入研究这个问题,似乎一个问题可能是您通过 Silverlight 使用 WCF 服务:请参阅Davy Brion 的博客了解更多信息。
元组的 Silverlight 版本没有 Serializable 属性,这在目前造成了问题。
我的 Tuple 可以很好地与 .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 服务提供服务的“WCF 服务应用程序”(参见 New..Project)进行调试来测试它。我使用这种方法进行调试,因为我可以使用调试器无缝地从 WCF 客户端进入 WCF 服务,然后再返回,这有时非常有用。
我还刚刚通过将它部署到控制台应用程序和服务应用程序来测试这种方法,所以它绝对适合我。