【问题标题】:ASP.Net webservice/asmx/ashx/whatever programmingASP.Net webservice/asmx/ashx/whatever 编程
【发布时间】:2011-03-26 01:11:04
【问题描述】:

我需要构建一个代理(可能是一个错误的描述),它从第 3 方接收 XML 文件,保存它,将其发送给另一个第 3 方,获取响应并将其传递回原始第 3 方。让我们将整个过程称为“单元”。

我应该使用网络服务吗?通用处理程序?还有什么?

我可能需要每秒做 20 个“单位”,但我知道每个“单位”可能跨越 30 秒到一分钟,所以说真的,我的意思是我需要能够拥有 1200 个这些“单位” "在我上面描述的过程的所有不同阶段同时运行。

就文件保存而言,我最终想将其放入数据库中,但我想写入文件比实际将数据保存到数据库中要快,所以我只需要另一个过程' 几乎没有像这样抓取文件并在其方便时将它们插入数据库的时间关键。

“应用程序”将仅包含 1 个页面,它将在 SSL 下运行。在任何给定时间,这可能是此服务器上唯一能确保这个小过程不会成为瓶颈的东西。

.Net 中的什么是解决此问题的好方法(快速且可扩展)?就硬件而言,我对我需要的东西没有任何有效的限制——所以如果它保证没有瓶颈,我可以得到一台尖叫的机器。

【问题讨论】:

  • 你说一个单元可能需要 30 秒,其中有多少时间在网络上传输,有多少在处理中?
  • 另外,您实际传输了多少数据?
  • 几乎所有这一切都将等待 2nd 3rd 方响应。我的代理只会接收文件(10k 或更少),将其保存到磁盘,然后将其传递并接收响应,然后将响应转发给调用客户端。

标签: asp.net web-services asmx httphandler


【解决方案1】:

由于 Web 服务基于 XML,您需要考虑这样一个事实,即您最终可能会得到“XML 内的 XML”。但其中一部分我想说的是使用 web 服务是一个很好的方法。主要是因为它兼容、易于使用且易于理解(供未来的维护者使用)。

但是,有一些替代方案使用更少的 CPU/内存/带宽。 WCF 提供了几个模型来解决这个问题,无论是在 IIS 下运行还是独立进程和传输类型。

就我个人而言,我喜欢通过 TCP 进行简单的老式二进制传输。 REST 可能是一种可行的方式,因为它是兼容的(例如前端代理/缓存),并且本质上为您提供了几乎没有开销的二进制传输。

我还喜欢将繁琐的工作留给 IIS,因此我避免使用独立的 WCF 应用程序。我认为 IIS 比我可以轻松做到的更快、更稳定。

也许我在high concurrent load 上的问题会有所帮助。

【讨论】:

    【解决方案2】:

    我会编写一个 WCF 服务,使用 REST 来简化它的 URL,并将 WCF 服务设置为作为单例运行,这样你的内存就不会失控。

    关于 WCF 的好文章:http://www.c-sharpcorner.com/UploadFile/sridhar_subra/116/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多