Kendo UI 多文件上传器在服务器迁移后崩溃

Posted

技术标签:

【中文标题】Kendo UI 多文件上传器在服务器迁移后崩溃【英文标题】:Kendo UI multifile uploader crashes after server migration 【发布时间】:2021-05-25 16:50:07 【问题描述】:

我有一个 asp.net webforms 应用程序,它为许多客户运行许多单独的实例,因为我们的一位客户要求将他们的应用程序转移到他们的专用服务器上。但是迁移后,Kendo File Uploader 的交互方式有所不同。

在旧服务器上,所有上传的文件将一个接一个地处理,超过 6 个文件在第一个被处理之前不会上传第七个文件。在备用实例上完成的这项测试大约需要 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
    

【问题讨论】:

首先检查IIS上的事件查看器,看看有没有异常。 IIS 不允许应用程序访问文件系统(用户默认为 GUESTS 帐户)。您是否发布并安装了应用程序?对于要在不同机器上运行的 Net 项目,两台机器必须是相同版本的 Net,或者您需要发布应用程序。 老服务器和迁移服务器有什么区别?如果代码相同,我认为可能是服务器不同造成的。 我还在做一些测试,但似乎旧服务器仍然使用http1.1协议,新服务器使用http2,这很可能意味着我需要付费Telerik来更新kendo ui组件,因为此应用程序较旧,并且可能使用较旧的版本。 【参考方案1】:

我们的应用程序仍然使用旧版本的 Kendo UI 多文件上传组件,这会在托管基于 HTTP2 协议的 Web 应用程序的服务器上导致某种管道错误,因为 HTTP2 实际上允许真正的多文件上传,而 HTTP1.1 本质上是恶搞这个概念,实际上是一个个上传文件。

一个快速而肮脏的解决方案是通过 Regedit 禁用网络服务器上的 HTTP2 协议。这将导致服务器回退到 HTTP1.1 协议。 How to disable HTTP/2 on IIS of Windows Server 2016

或者干净的解决方案是将 Web 应用程序中的 Kendo UI 多文件上传组件更新到最新版本。

【讨论】:

以上是关于Kendo UI 多文件上传器在服务器迁移后崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何过滤文件kendo-ui上传?

Kendo UI - 上传按钮 - 自定义

Kendo UI 文件夹上传出错 - ERR_HTTP2_PROTOCOL_ERROR

Angular 2 上传组件的 Kendo UI - 上传方法

使用文件选择器在图像 UI 元素中设置图片

UI 图像选择器在 ios 7/iphone 4s 上崩溃