Kendo UI 多文件上传器在服务器迁移后崩溃
Kendo UI multifile uploader crashes after server migration
我有一个 asp.net webforms 应用程序,它为许多客户运行许多单独的实例,由于高流量,我们的一位客户要求将他们的应用程序移动到他们的专用服务器。但是,迁移后,Kendo 文件上传器的交互方式有所不同。
在旧服务器上,所有上传的文件都会一个接一个地处理,超过 6 个文件,第 7 个文件会在第一个处理完后才会上传。在备用实例上完成的此测试大约需要 20 秒才能完成。
但是迁移后,所有文件同时上传,当队列中的第一个文件尚未完全上传,而第二个文件已上传时,整个上传挂起并停止更新。这种情况最终确实有效,但这个过程现在需要 30 多分钟,而不是预期的 20 秒。
我已经通过故障排除和日志记录找到了一些东西。
- 调用在 Kendo UI 的过程中挂起,因为它没有到达服务器。
- 旧服务器实例和新服务器的代码和 web.config 相同。
- 当我在 Kendo 组件的 OnUpload 函数中放置断点
debugger;
时,不会发生错误。除非我立即加速通过断点,否则在开始第二个文件之前以某种方式给第一个文件上传时间确实可以解决它。
基本上我唯一能想到的是它是由 IIS 配置不同引起的,但我的知识仅此而已。所以我希望其他人遇到过这样的问题。
最后,如果人们想要更深入的代码示例,我可以提供。这里至少是 Kendo UI 初始化。
$("#files").kendoUpload({
async: {
saveUrl: "FileUploadKendoUI.aspx",
removeUrl: "FileUploadKendoUI.aspx",
autoUpload: true
},
template: kendo.template($('#fileTemplate').html()),
upload: onUpload,
success: onSuccess,
error: onError,
select: onSelect,
localization: {
select: arrLabels[0],
uploadSelectedFiles: arrLabels[1],
dropFilesHere: arrLabels[2],
headerStatusUploaded: arrLabels[3]
}
});
并且在后端 FileUploadKendoUI.aspx 但是我在这段代码中放置了一个日志行,它甚至没有到达这个地方,所以在这里找不到问题。
public partial class FileUploadKendoUI : System.Web.UI.Page
{
//Local params
protected void Page_Load(object sender, EventArgs e)
{
//Code that obtains and sets some default information
Remoteclass.InitializeSettings();
//Code to process and save the file.
ProcessRequest();
}
public void ProcessRequest()
{
//Do process
}
}
我们的应用程序仍然使用旧版本的 Kendo UI 多文件上传组件,这导致在 HTTP2 协议上托管 Web 应用程序的服务器上出现某种管道错误,因为 HTTP2 实际上允许对于真正的多文件上传,而HTTP1.1本质上是在欺骗这个概念,但实际上是一个一个地上传文件。
一个快速而肮脏的解决方案是通过 Regedit 在网络服务器上禁用 HTTP2 协议。这将导致服务器退回到 HTTP1.1 协议。
或者干净的解决方案是将 Web 应用程序中的 Kendo UI 多文件上传组件更新到最新版本。
我有一个 asp.net webforms 应用程序,它为许多客户运行许多单独的实例,由于高流量,我们的一位客户要求将他们的应用程序移动到他们的专用服务器。但是,迁移后,Kendo 文件上传器的交互方式有所不同。
在旧服务器上,所有上传的文件都会一个接一个地处理,超过 6 个文件,第 7 个文件会在第一个处理完后才会上传。在备用实例上完成的此测试大约需要 20 秒才能完成。
但是迁移后,所有文件同时上传,当队列中的第一个文件尚未完全上传,而第二个文件已上传时,整个上传挂起并停止更新。这种情况最终确实有效,但这个过程现在需要 30 多分钟,而不是预期的 20 秒。
我已经通过故障排除和日志记录找到了一些东西。
- 调用在 Kendo UI 的过程中挂起,因为它没有到达服务器。
- 旧服务器实例和新服务器的代码和 web.config 相同。
- 当我在 Kendo 组件的 OnUpload 函数中放置断点
debugger;
时,不会发生错误。除非我立即加速通过断点,否则在开始第二个文件之前以某种方式给第一个文件上传时间确实可以解决它。
基本上我唯一能想到的是它是由 IIS 配置不同引起的,但我的知识仅此而已。所以我希望其他人遇到过这样的问题。
最后,如果人们想要更深入的代码示例,我可以提供。这里至少是 Kendo UI 初始化。
$("#files").kendoUpload({
async: {
saveUrl: "FileUploadKendoUI.aspx",
removeUrl: "FileUploadKendoUI.aspx",
autoUpload: true
},
template: kendo.template($('#fileTemplate').html()),
upload: onUpload,
success: onSuccess,
error: onError,
select: onSelect,
localization: {
select: arrLabels[0],
uploadSelectedFiles: arrLabels[1],
dropFilesHere: arrLabels[2],
headerStatusUploaded: arrLabels[3]
}
});
并且在后端 FileUploadKendoUI.aspx 但是我在这段代码中放置了一个日志行,它甚至没有到达这个地方,所以在这里找不到问题。
public partial class FileUploadKendoUI : System.Web.UI.Page
{
//Local params
protected void Page_Load(object sender, EventArgs e)
{
//Code that obtains and sets some default information
Remoteclass.InitializeSettings();
//Code to process and save the file.
ProcessRequest();
}
public void ProcessRequest()
{
//Do process
}
}
我们的应用程序仍然使用旧版本的 Kendo UI 多文件上传组件,这导致在 HTTP2 协议上托管 Web 应用程序的服务器上出现某种管道错误,因为 HTTP2 实际上允许对于真正的多文件上传,而HTTP1.1本质上是在欺骗这个概念,但实际上是一个一个地上传文件。
一个快速而肮脏的解决方案是通过 Regedit 在网络服务器上禁用 HTTP2 协议。这将导致服务器退回到 HTTP1.1 协议。
或者干净的解决方案是将 Web 应用程序中的 Kendo UI 多文件上传组件更新到最新版本。