【问题标题】:Why is calling a web service slower from a web page?为什么从网页调用 Web 服务会变慢?
【发布时间】:2008-10-14 16:44:29
【问题描述】:

我们有一个 DLL 用作我们网站前端和后端票务系统之间的中间层。插入票务系统的方法解释起来有点复杂,但简短的版本是它很慢。我得到的最佳案例是 9 秒的提交时间。

但真正的问题是,我只能通过 Windows 应用程序而不是通过 ASP.NET 网站来获得那个时间。我已经设置了一个 Windows 测试应用程序和一个用于测试的网页,即使在它们之间复制代码,网页也始终在 17-20 秒内提交,而 Windows 应用程序则需要 8-11 秒。

可能是什么原因造成的?

编辑:针对几个答案...

对 Web 服务的调用占用了大部分时间,但我无法控制此 Web 服务,因为它是由票务系统供应商提供的。我需要找出为什么当从不同类型的应用程序调用 Web 服务时,它会花费不同的时间。两种情况下的代码完全相同,它运行一个循环然后报告记录的时间。

代码是:

for (int i = 0; i < numIterations; i++)
        {
            startTimes[i] = DateTime.Now;

            try
            {
                cvNum = Clearview.Submit(req, DateTime.Now, DateTime.Now, false);
            }
            catch (Exception ex)
            {
                exceptionCount++;
                lblResult.Text += @"<br />Exception Caught: " + ex.Message + @"<br />";                    
            }

            endTimes[i] = DateTime.Now;
    }

在这两种情况下都是相同的循环,我在调用库之前和之后标记时间,它会进行进一步处理,然后调用 Web 服务。但是那个处理应该是一致的,不是吗?我在调试过程中进行了跟踪,没有看到任何延迟到实际的 Web 服务调用...

再次编辑:使用 Ants,在这两种情况下,99.4% 的时间都只是在 Web 服务调用上发送。那里似乎没有区别...除了超时时网页比Windows应用程序花费的时间更长。

【问题讨论】:

  • 您将哪些 Windows 和 Web 客户端用于 Web 服务?
  • 您使用的是 HttpWebRequest、生成的 Reference.cs、JavaScript 客户端 Web 客户端还是什么?
  • 在两个不同的 Web 服务后端之间进行测试:在一种情况下生成 Reference.CS,在另一种情况下生成 WebClient。该引用在 Windows 应用程序和网页都使用的 .DLL 中生成。

标签: asp.net web-services


【解决方案1】:

Web 服务相对于 Web 服务器的位置可能存在问题。此外,Web UI 中的页面结构和其他处理可能会影响应用程序的处理时间。

如前所述,在两侧记录项目是一个好主意,如果这不能满足您的需求,您可以尝试使用性能分析器,例如 Red Gate 的 Ants Profiler,它可以帮助识别行、方法或类这占用了大部分时间。

【讨论】:

  • 我刚刚添加了更多信息。我无权访问网络服务的内部,但不知道为什么这很重要......
  • 另外,由于我在我的桌面上进行测试,所以两个客户端的 Web 服务都在同一个地方......
  • 在这种情况下,我会查看 Ants Profiler,查看循环执行时间。此外,在一种情况下引发的异常是否比另一种情况更多?例外是昂贵的。
  • 现在玩蚂蚁,但没有抛出异常。
  • 好的,看看两个应用程序之间的蚂蚁是否可以隔离一个需要更多努力的特定线路。
【解决方案2】:

您是否在同一台机器上运行两者?您调用的中间层是否位于远程机器上?您提到的持续时间模糊地感觉像是 DNS 超时问题,当打开连接时,第一个(关闭/错误寻址)DNS 响应超时会受到惩罚。您确定将 DLL 指向中间层的任何配置文件/var 在两次调用中都是相同的吗?

我赞成使用 Wireshark 来查看发生了什么的建议。您至少可以让自己满意,后端处理时间(应该,无论如何)是一样的......

【讨论】:

  • 这是一个配置问题,一个正在提交到生产系统,尽管两者都使用了正确的 Web 服务。时间差是因为 prod 数据库显然有多忙。老实说,根本不知道为什么它会起作用......不过谢谢!
【解决方案3】:

用日志在你的应用程序的两边加上胡椒粉——这将告诉你时间的去向。如果这没有帮助,请使用Wireshark 跟踪网络活动。

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 2017-04-16
    • 2014-02-21
    • 2018-01-04
    • 1970-01-01
    • 2014-12-04
    • 2015-06-23
    • 2016-06-27
    • 2019-11-16
    相关资源
    最近更新 更多