.net - ASMX Web 服务较慢的第一个请求

标签 .net web-services asmx

我在一个 IIS 应用程序中运行了一堆 .NET Web 服务。这些 Web 服务由另一个 IIS 应用程序(前端)使用。第一次调用很慢,大约 5 到 10 秒。之后只是几毫秒。第一次调用被认为是性能问题。

我们尝试了一个调用所有这些网络服务的应用程序,但这显然没有解决任何问题。因此,问题不是默认的应用程序回收。我创建了一个应用程序,它只是多次初始化服务并测量创建一个实例所需的时间。在运行这个应用程序之前,我确保我的 webservice 应用程序已启动/回收,然后我运行该应用程序。第一次初始化需要 2 到 4 秒,所有其他初始化只需几毫秒。

另一个想法是我们在 Frontend 应用程序中创建一个页面来启动所有 web 服务,并且在任何用户进入之前调用这个页面。我不认为这是一个优雅的解决方案,我还能尝试什么?

最佳答案

客户端第一次调用 Web 服务时遇到的延迟是由于默认情况下需要编译 Web 服务的 XmlSerializers dll 造成的。这导致初始调用的 2-4 秒。当然,当 webservice 应用程序已经在运行时就是这种情况,如果不是,你会有一个回收。在这种情况下,其他答案可能会有所帮助。

为了加速初始调用,您可以在编译时创建 XmlSerializers dll。您可以通过将项目构建“生成序列化程序集”设置为开启来实现此目的。这会生成一个包含 Web 服务信息的 MyApplication.XmlSerializers.dll。现在初始调用下降到 300 毫秒,大概是 dll 的加载。 0 毫秒后,那里的所有调用都在那里。

在 Visual Studio 中右键单击您的项目并选择“属性”。转到“构建”选项卡。在“输出”部分中有一个选项“生成序列化程序集”。如果将该值更改为“On”,则将在编译期间生成序列化程序集。

关于.net - ASMX Web 服务较慢的第一个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/784918/

相关文章:

.net - 使用 WPF 在外发光上实现平滑动画

c# - C#-不允许发送数据请求,因为未连接套接字

.NET - 多数据库支持策略

c# - 从 COM TLB 创建头文件

c# - 如何确定内部 IP

ASP.Net Web 服务 - 有什么方法可以禁用 "Test/invoke"部分?

c# - 如何增加 ASMX Web 服务的 POST 大小?

web-services - VS2010 无法添加服务引用

php - 如何使用 MySQL 结果集组合、分页和排序外部 API

c# - IIS/.NET 3.5 的 X-Sendfile 或 X-Accel-Redirect 等效项