代码之家  ›  专栏  ›  技术社区  ›  Donut

通过wcf发送tuple对象?

  •  14
  • Donut  · 技术社区  · 16 年前

    System.Tuple wcf的数据协定序列化程序支持的类(即,我可以传递 Tuple 对象到WCF调用和/或作为结果的一部分或全部接收它们?

    我发现 this page 但不是我希望得到的明确、明确的“你可以用wcf发送和接收tuples”答案。

    我猜你可以,只要所有的类型 在内部 这个 元组 数据契约序列化程序支持它本身——有人能给我一个更明确的答案吗?谢谢。

    3 回复  |  直到 15 年前
        1
  •  15
  •   Venemo    16 年前

    这个 Tuple 类型标记为 SerializableAttribute 因此,如果存储在其中的类型是可序列化的,那么它们也应该能够被WCF序列化。

    签出:链接 Tuple'1 , Tuple'2 等等,它说:

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

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

    部分信任环境中不支持[serializable]/iserializable编程模型。

    所以,这可能不像看上去那么容易。

    (顺便说一句, Tuple static class 也值得一看。)

        2
  •  9
  •   Andrew Anderson    15 年前

    我自己也在研究这个问题,如果您通过Silverlight使用WCF服务,可能会出现一个问题:请参见 Davy Brion's blog 更多。

    tuple的silverlight版本没有serializable属性,这目前存在问题。

        3
  •  5
  •   Contango    15 年前

    我有一些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服务,然后再次返回,这在某些时候非常有用。

    我还通过将它部署到控制台应用程序和服务应用程序来测试这个方法,所以它对我来说肯定是有效的。

    推荐文章