【问题标题】:Sending a Tuple object over WCF?通过 WCF 发送元组对象?
【发布时间】:2011-02-13 12:58:12
【问题描述】:

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

我找到了this page,但不是我希望的明确、明确的“您可以使用 WCF 发送和接收元组”的答案。

我猜你可以,只要Tuple 本身的所有类型都受数据协定序列化程序支持——谁能给我一个更明确的答案?谢谢。

【问题讨论】:

  • 只要元组中的类型是基本类型,而不是自定义类型,元组就可以在 WCF 中正常工作。如果是这样,那么它将导致对客户端的循环依赖,因为客户端不会是 Tuple,而是 TupleT。我现在有这个问题。 Web 服务中的泛型似乎是个坏主意。

标签: c# .net wcf serialization datamember


【解决方案1】:

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

查看:Tuple'1Tuple'2 等的链接。上面写着:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    Silverlight 版本的 Tuple 没有 Serializable 属性,目前存在问题。

    【讨论】:

      【解决方案3】:

      我的 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 服务应用程序”(参见 New..Project)进行调试来测试它,该应用程序为 WCF 服务提供服务。我使用这种方法进行调试,因为我可以使用调试器无缝地从 WCF 客户端进入 WCF 服务,然后再返回,这有时非常有用。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-19
        • 2015-10-04
        • 1970-01-01
        相关资源
        最近更新 更多