FTP发布ASP.NET MVC网站时用户访问会产生哪些问题?
ASP.NET MVC FTP发布时段用户访问相关问题解答
1. 旧版本网站是否仍可正常访问?
FTP发布属于逐文件覆盖的发布方式,在会触发站点重启的核心运行文件(如bin目录下的程序集、Web.config、Global.asax等)被覆盖前,旧版本站点可以正常访问;一旦上述核心文件被覆盖,站点会立即触发重启,旧版本停止服务,重启完成前所有用户都无法正常访问站点。
2. 用户浏览时是否会出现非预期异常行为?
大概率会出现。因为FTP上传是单文件逐个传输的,发布中间会出现新旧版本代码、资源混合共存的状态:比如新版控制器逻辑已经上传,但对应的视图文件还未更新,用户访问时会出现字段缺失、视图渲染失败;如果静态资源(js、css、图片)发生了不兼容更新,还会出现页面样式错乱、交互功能失效的问题。
3. 用户此时访问是否会导致网站出现编译错误等风险?
存在编译错误的风险。ASP.NET MVC会在首次访问对应路径时动态编译视图,如果用户访问时刚好出现新版视图/控制器已经上传,但依赖的类库程序集还未完成覆盖,运行时编译就会找不到对应的类型、方法,直接抛出编译异常;如果站点未配置自定义错误页,这类异常还会暴露服务器路径、代码结构等敏感信息。
4. 发布前已登录用户的session变量内容是否会丢失?
是否丢失取决于你使用的Session存储模式:
- 默认InProc(进程内存储):发布过程中站点进程会触发重启,所有存在进程内存中的Session数据会被全部清空,已登录用户会直接丢失登录状态。
- 进程外存储(StateServer、SQL Server、Redis分布式缓存等):只要发布过程中没有修改Session配置、身份验证加密规则(比如
machineKey),已存在的Session数据就不会丢失,用户登录状态不受影响。
建议尽量避免直接用FTP覆盖线上站点的发布方式,条件允许的话可以先把所有发布文件传到服务器临时目录,全部传输完成后再一次性覆盖到站点目录,或者使用蓝绿发布、预发布槽等方案,最大程度降低发布对用户的影响。
内容的提问来源于stack exchange,提问作者Philippe
相关产品推荐
相关产品推荐

