【问题标题】:What can cause a two minute delay in calling a webservice?什么会导致调用 Web 服务时延迟两分钟?
【发布时间】:2009-08-04 16:34:20
【问题描述】:

我们有一个 .NET 3.5 应用程序,它调用服务器上的 Web 服务。在这个应用程序的几乎每次安装中,整个请求/回复过程大约需要半秒。

在一个特定的安装中,这些请求几乎花费了 85 秒(半秒之内)。

我的第一个想法是 web 服务客户端每次调用都在重建 XML 序列化程序集,但即使直接发送硬编码的 xml 文件仍然需要几乎完全相同的时间。观察网络流量似乎表明事务的实际发送数据部分正在发生在一秒钟之内。所以问题都在客户端。

是否存在某种可能导致此问题的权限延迟?

编辑(更详细):
该应用程序是 Web 服务查询的基本包装器 - 输入一些参数,向 Web 服务发送查询并获得响应。我们从 wsdl.exe 工具生成的客户端代码开始,但也尝试在遇到问题时直接使用 HttpWebRequest。根据日志和网络跟踪,流程似乎是:

T 0:00 - user initiates request
T 1:24 - the application sends request to server
T 1:25 - the client receives the response and displays to the user.

【问题讨论】:

  • 此时必须进行身份验证,您的 Web 服务上的安全设置是什么?
  • 它在纯 http 上运行,无需通过 VPN 进行身份验证。

标签: .net performance web-services


【解决方案1】:

感谢您的所有建议。该问题是由代理自动检测引起的。基本上,如果 Internet Explorer 设置为自动检测代理,那么 HttpWebRequest 也会,只是它会在您每次创建新的 WebRequest 时自动检测,而不是以有用的方式缓存任何内容。

最后,我找到了这篇知识库文章:http://support.microsoft.com/kb/968699

解决方案只是将其添加到 app.config 文件中:

<configuration>
    <system.net>
        <defaultProxy >
            <!-- Disable Autoproxy-->
            <proxy autoDetect="false"/>
        </defaultProxy>
    </system.net>
</configuration> 

【讨论】:

    【解决方案2】:

    如果数据在一秒内发送,但总响应时间是 85 秒,为什么您会觉得问题出在客户端?是否需要 85 秒才能收到服务器的回复?

    通常,如果您看到这种类型的非常一致(半秒内)的延迟,请在处理过程中寻找某种超时。这听起来很像网络超时。是否存在服务器可能试图访问的网络资源?身份验证就是这样一种网络资源。文件共享、外部 http 或 ftp 调用也可能是候选对象。

    您能否更详细地描述您的应用程序?

    【讨论】:

      【解决方案3】:

      听起来确实像超时问题。一个想法-配置了哪种类型的代理?机器是否在发出请求之前尝试检测 HTTP 代理?我认为是时候使用网络监视器来查看发生了什么。

      【讨论】:

        【解决方案4】:

        如果该服务也是 .NET,您可能能够使用跟踪来查明问题的根源。您可以将跟踪添加到您的 web.config,如下所示:

         <system.diagnostics>
                <sources>
                    <source name="System.ServiceModel"
                            switchValue="Information, ActivityTracing"
                            propagateActivity="true">
                        <listeners>
                            <add name="traceListener"
                                type="System.Diagnostics.TextWriterTraceListener"
                                initializeData="c:\temp\Traces.txt"  />
                        </listeners>
                    </source>
                </sources>
            </system.diagnostics>
        

        这将跟踪 3.5 中的网络服务“System.ServiceModel”的任何活动

        【讨论】:

          【解决方案5】:

          在执行请求时,使用诸如 wireshark 之类的程序来嗅探网络。 首先在客户端,如果您在服务器上仍然一无所知。 (两者同时提供更多洞察力)。

          通过这种方式,您可以排除 tcp-ip 重传、身份验证问题、代理异常等问题

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-12-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多