Rem*_*ing 23 .net web-services asmx
我在一个IIS应用程序中运行了一堆.NET Webservices.这些Web服务由另一个IIS应用程序(前端)使用.第一个电话很慢,大概5到10秒.在那之后它只是几毫秒.第一个电话被认为是性能问题.
我们尝试过调用所有这些Web服务的应用程序,但这显然无法解决任何问题.因此,问题不在于默认的应用程序回收.我创建了一个应用程序,它只是多次初始化服务并测量创建一个实例所需的时间.在运行此应用程序之前,我确保启动/回收我的Web服务应用程序,然后运行该应用程序.第一次初始化需要2到4秒,所有其他的只需几毫秒.
另一个想法是我们在前端应用程序中创建一个页面,启动所有的Web服务,并在任何用户进入之前调用此页面.我不认为这是一个优雅的解决方案,我还能尝试什么?
Rem*_*ing 35
客户端第一次调用Web服务时遇到的延迟是由于默认情况下需要编译Web服务的XmlSerializers dll.这导致初始呼叫的2-4秒.当然,当webservice应用程序已经运行时就是这种情况,如果它不是你将有一个回收.在这种情况下,其他答案可能有所帮助.
要加快初始调用,可以在编译时创建XmlSerializers dll.您可以通过将项目构建"生成序列化程序集"设置为打开来执行此操作.这将生成包含Web服务信息的MyApplication.XmlSerializers.dll.现在,初始调用降至300毫秒,可能是dll的加载.之后的所有呼叫都需要0 ms.
在Visual Studio中右键单击您的项目,然后选择"属性".转到"构建"选项卡.您可以在"输出"部分中选择"生成序列化程序集".如果将值更改为"On",则将在编译期间生成序列化程序集.
Fen*_*ton 10
第一次调用Web服务时,或者在长时间延迟后第一次调用Web服务需要启动.这是你看到延迟的地方.在那之后,它已经开始并且会对呼叫做出快速响应.这是标准的Web服务行为.
您可以将IIS配置为keepalive = true - 这可以提高性能.
更多信息请求.
可能是在运行时创建序列化程序集.您可以使用项目属性窗口的"构建"窗格底部的下拉列表更改序列化程序集的设置.
可能是您编写了Web服务以在应用程序启动时执行大量操作,这将在第一次调用服务上的方法时发生.
可能是操作非常慢,但是您正在缓存响应,这会使后续调用更快.
我最近发现在我们的ASMX文件中我们只引用了类名.我们在每个ASMX文件的不同程序集中获得了服务实现.这会导致.NET框架扫描整个bin文件夹,查找包含实现的程序集.随着您的Web服务应用程序的增长,这将消耗更多时间.这可以通过不仅包括ASMX定义中的类名而且还包括程序集名称来解决.
我们的ASMX看起来像这样:
<%@ WebService Language=”C#” CodeBehind=”MyService.cs” Class=”MyWebservice” %>
如果将其更改为包含包含实现的程序集,它将如下所示.这为我们节省了大约10%的Web服务应用程序的初始负载.
<%@ WebService Language=”C#” CodeBehind=”MyService.cs” Class=”MyWebservice, MyWebservice.Implementation.Assembly” %>
归档时间: |
|
查看次数: |
34080 次 |
最近记录: |