【问题标题】:Trying to understand web services performance试图了解 Web 服务的性能
【发布时间】:2010-09-09 04:02:51
【问题描述】:

大约一年前,我购买了一个 ASP.NET 脚本来检索 FedEx 的运费值。它构建一个使用 HttpWebRequest 传递给 FedEx 服务器的 XML 字符串,然后解析原始 XML。脚本的平均响应时间约为 900 毫秒。

所以前几天我在 FedEx 开发人员中心四处闲逛,发现他们提供了一些 C# 代码示例以使用他们的 Web 服务。我使用他们的代码和 WSDL 文件构建了一个小项目,惊讶地发现平均响应时间约为 2.5 秒。

有人可以帮助我了解速度的差异吗?有没有办法让它更快?我使用网络服务的经验为零。

谢谢。

【问题讨论】:

  • 如果我们能看到脚本会有所帮助。

标签: asp.net performance web-services


【解决方案1】:

由于验证和所谓的“SOAP 信封”,Web 服务在 XML over HTTP 调用方面有一些开销,这增加了一些额外的冗长。

也就是说,我不认为响应时间变长是因为这个。您今天是否尝试运行 XML over HTTP 版本以获得合理的比较点?也许网站只是忙。

另一种解释可能是编码错误。你永远不知道。

【讨论】:

    【解决方案2】:

    嗯,ASP.NET 脚本可以做一些不同于 C# 代码的事情。尝试捕获每个原始 HTTP 请求并回放它们。他们的表现一样吗?如果是这样,那么很可能是客户端代码存在差异。我的猜测是,一个是直接的 HTTP get/post 请求,另一个是 SOAP over HTTP(s)。

    其他需要注意的事项: 1) 你是为 ASP.NET 生产和为 C# 测试系统,还是它们都是生产的? 2) 假设两者都通过 HTTPS。

    基于 SOAP 的 Web 服务通常更“重”——尤其是如果您的请求最终执行 WS-*、签名等。您是否必须通过提供密钥/x.509 来签署您的 C# 请求或其他凭据?

    根据对上述一些基础知识的回答,这个讨论可以有多种方式。

    【讨论】:

    • “我猜一个是直接的 HTTP get/post 请求,另一个是 HTTP 上的 SOAP。”你就在这里。我已经测试了几天,并且我正在为每个服务器打生产服务器。是的,SOAP 调用确实需要密钥。
    • 如果您可以控制协议,请将其切换到 HTTP 并使用 WireShark(或我最喜欢的 netcat)捕获请求。将它们回放到 FedEx 服务器,看看你得到了什么时间。我敢打赌,SOAP 服务中的大部分时间都是由于 SOAP + WS-* 开销造成的。
    猜你喜欢
    • 2011-09-15
    • 2010-11-15
    • 2011-02-15
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    相关资源
    最近更新 更多