【问题标题】:Best Way to Transmit LARGE data packages via SOAP web service通过 SOAP Web 服务传输 LARGE 数据包的最佳方式
【发布时间】:2013-02-06 17:59:26
【问题描述】:

我们正在使用 .NET 3.5 应用程序,该应用程序正在快速接近旧版状态。我们有一个现有的 SOAP 服务,它从我们的数据库中读取记录并将它们保存到第三方 MS SQL 数据库中,在一个批次中发送所有数据行。

这一直运行良好,但最近我们接收了一个比以往任何时候都大得多的客户,而且他们正在传输更大的批次,以至于他们开始失败。我们已经提高了 IIS 中的超时和最大内存大小,并在 web.config 中最大化了 maxRequestLength,但我们仍然遇到了大小问题。

所以,我知道从长远来看,我们应该考虑从 SOAP 转移到 WCF,并且相关计划正在制定中。但与此同时,我们需要对这个新客户进行短期修复。当然,为了让业务和销售人员满意,我们需要尽快完成。

我想知道最佳实践方法可能是什么。最初我在想这样的事情,但我可能想太多了:

  1. 为我们不想一次尝试同步所有记录的 # 条记录建立基准。

  2. 在尝试保存数据之前,对照该基准检查记录数

  3. 如果高于它,则将传输分解为低于该基准的段。 SELECT TOP 10000 * FROM table WHERE sent = false 等,如果基准是 10000。那么一旦提交,这些记录的更新发送为 true。重复。

  4. 很明显,这会减慢进程,所以为了处理用户体验,我们可能想扔一个状态栏,让他们可以看到进度。

我走对了吗?

【问题讨论】:

  • 当您说“SOAP”时,您的意思是“ASMX”? WCF 也可以做 SOAP,并且替代了 ASMX。
  • .asmx。是的,好问题。本来想说但忘了。
  • WCF 在处理数据方面也更加高效。 ASMX 有时会在内存中同时保留三个数据副本。 WCF 甚至允许您将数据流式传输回客户端。
  • 明白。所以,我想我的问题是:从 .asmx 迁移到 WCF 是一个快速的过程吗?我不熟悉WCF。我假设将我们的数据映射到他们的数据的核心逻辑将保持不变,但包装器会改变。对吗?
  • 基本正确。假设您的服务不花哨,这是一个非常简单的转换。

标签: wcf soap asmx


【解决方案1】:

除了 John 的 cmets,您还应该考虑是否以最佳方式解决问题。

看起来您正在通过调用 Web 服务来触发 2 个数据库之间的单向同步。这种方法会导致您遇到超时和内存问题。

如果您的目标是单向同步,您可以使用免费的框架,例如 Microsoft 的同步框架:http://msdn.microsoft.com/en-US/sync

【讨论】:

    猜你喜欢
    • 2011-03-04
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-08-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多