【问题标题】:WCF DataContract versioning without ServiceContract没有 ServiceContract 的 WCF DataContract 版本控制
【发布时间】:2015-01-07 13:24:38
【问题描述】:

我对 WCF 非常陌生,我正在努力了解它是如何工作的。请记住,我(绝不)是一名网络开发人员,我无意以这种方式使用它。但是,这似乎是我申请的方式。我在网上看到的所有文章和教程,包括事实上的标准"Best Practices" article,似乎都假设它与数据库和 Web 服务一起使用,所以我很难理解什么他们试图传达。

基本上,我有一个项目,其中一些类会随着时间的推移而迅速发展(所以我假设敏捷版本控制是最好的)。我希望该类的旧版本与新版本向后兼容,反之亦然。现在,就我目前而言,我只会使用这些类来存储数据;除了 getter/setter 之外,我真的不需要任何方法。这就是为什么我说我真的不需要服务合同,或者我相信。这些对象基本上将用作单例来传递对这个全局数据集的访问。我也希望能够在多台机器上的多个应用程序之间共享这些数据对象。

有什么方法可以用 WCF 做到这一点,我将如何去做。我将不胜感激对将 Web 和数据库内容保持在最低限度的框架的任何解释。当然,我也愿意接受其他可以实现我想要的建议。谢谢

【问题讨论】:

    标签: c# wcf versioning backwards-compatibility


    【解决方案1】:

    好的,那么我强烈建议下载 ServiceStack NuGet 包并使用 ServiceStack.Text.TypeSerializer - API 看起来像这样(非常简单)

    string serialString = ServiceStack.Text.TypeSerializer.SerializeToString<TObject>(content);
    

    你得到你的类的 JSON 字符串版本,然后你可以使用反向

    TObject assetValue = ServiceStack.Text.TypeSerializer.DeserializeFromString<TObject>(serialString);
    

    再次找回它。在中间,您可以保存、发送或其他任何方式。它对结构的变化非常宽容。

    【讨论】:

      【解决方案2】:

      根据我的经验,WCF 对于您想要实现的目标来说非常重要。如果您有简单的“数据传输对象”,那么您最好简单地创建一个 REST 服务(或其他返回 JSON 的 Web 服务)。您似乎想在多台机器之间来回序列化数据 - WCF 可以为您做到这一点 - 但使用简单的存储隐喻可能会更好,REST 做得很好并且在 MVC 框架中实现起来更简单.

      【讨论】:

      • 是的,我同意;它看起来确实很重量级。 REST上有什么好的资源吗?特别是不太基于网络/数据库的?
      • 嗯,REST 实际上只是一种返回 JSON(通常)序列化类的 HTTP 调用语法。鉴于此,没有“非 Web”REST 实现。您的 API 将托管在 IIS 上并通过 HTTP 进行通信,因此您可以做得比关注asp.net/web-api/overview/older-versions/…
      • 对不起,但对我来说这仍然是希腊语。我很熟悉 JSON 和 XML 作为存储数据的一种方式,但同样,我从未在基于 Web 的应用程序中使用过它们,所以我仍然不太了解。
      • 好吧,只要考虑一下 JSON 是一种更紧凑、更不严格的数据传递方式。它只是从 HTTP 调用返回数据的一种格式 - 但是 .net 框架有多个序列化程序(二进制、Json、XML、DataContractSerializer)。我认为您需要更具体地说明您希望如何在应用程序之间传递数据 - 从您的响应来看,这可能是通过磁盘文件而不是 HTTP 调用? Json 恰好在处理类/数据不匹配方面更有弹性,
      • 是的,我理解 JSON;让我困惑的是 HTTP 调用。就我而言,所有这些都将在本地完成,因此会造成混乱。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多