在.net中,初始web服务调用需要很长时间

本文关键字:调用 长时间 服务 web net 初始 | 更新日期: 2023-09-27 18:18:22

我有一个使用HTTPS托管在IIS中的WCF web服务。服务和客户端应用都是用c#编写的。客户端应用程序发出的第一个web服务调用需要超过15秒才能完成。一旦进行了初始调用,随后的调用将在大约100毫秒内完成。为了测试,我有一个简单的方法:字符串Ping(int val);它只是以字符串的形式回显传入的数字。

奇怪的是,千里之外的用户报告了这个问题,但我在开发机器上没有遇到这个问题。我只看到第一个请求花了2到3秒。现在几乎每个客户端都报告第一个请求花费了超过15秒。

这是c#客户端的正常行为吗?有人遇到过这个问题吗?

我的web服务绑定配置如下:

<basicHttpBinding>
  <binding
    name="BasicHttpBinding_IMyWebSvc"
    maxBufferSize="16777216"
    maxReceivedMessageSize="16777216"
    messageEncoding="Mtom">
    <readerQuotas
      maxDepth="1024"
      maxStringContentLength="262144"
      maxArrayLength="16777216"
      maxBytesPerRead="16777216"
      maxNameTableCharCount="16777216"
    />
    <security mode="Transport">
      <transport clientCredentialType="None"/>
    </security>
  </binding>
</basicHttpBinding>

编辑:这个问题变得奇怪了。

我使用精简的代理代码编写了一个测试客户端,其中除了Ping()测试方法之外什么都没有。运行测试,仍然需要>15秒。开始更改客户机缓冲区大小,因为Ping()函数不需要大缓冲区,问题就解决了。将缓冲区大小恢复到原始值,问题不再出现。运行真实客户端,第一次调用在1.2秒内完成。现在我无法在我的开发PC上重现这个问题。

在.net中,初始web服务调用需要很长时间

在IIS上托管。net应用程序的问题是应用程序池预热时间。池终止后(在空闲时间或修改bin文件之后),直到下一个请求才会重新创建它。你可以使用IIS应用程序预热模块(你可以使用Web Platform Installer安装它)

如果您在客户机中使用WCF代理,则生成代理管道所需的时间将使第一次调用比后续调用慢。

检查上一个问题的答案,它与asmx服务有关,但核心问题可能是相同的

ASMX Web Service首次请求慢