在.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上重现这个问题。
在IIS上托管。net应用程序的问题是应用程序池预热时间。池终止后(在空闲时间或修改bin文件之后),直到下一个请求才会重新创建它。你可以使用IIS应用程序预热模块(你可以使用Web Platform Installer安装它)
如果您在客户机中使用WCF代理,则生成代理管道所需的时间将使第一次调用比后续调用慢。
检查上一个问题的答案,它与asmx服务有关,但核心问题可能是相同的
ASMX Web Service首次请求慢