我使用HTTPS在IIS中托管了WCF Web服务。服务和客户端应用程序都是用C#编写的。客户端应用程序进行的第一个Web服务调用需要15秒才能完成。一旦进行了初始调用,则子调用将在大约100毫秒内完成。为了测试,我有一个简单的方法:string 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上重现这个问题。
答案 0 :(得分:0)
在IIS上托管.NET应用程序的问题在于应用程序池预热时间。池终止后(空闲时间或bin文件修改后),直到下一个请求才会重新创建。您可以使用IIS的IIS应用程序预热模块使您的应用程序池保持活动状态(可以使用Web Platform Installer进行安装)
答案 1 :(得分:0)
如果您在客户端中使用WCF代理,则生成代理管道所需的时间将使第一次调用比后续调用慢。有关详细信息,请参阅此article。
答案 2 :(得分:0)
检查上一个问题的答案,它与asmx服务有关,但核心问题可能是相同的