首页 > 代码库 > BS网站在线升级(服务器通信)
BS网站在线升级(服务器通信)
背景:日前公司需要将客户企业站增加在线升级功能。即客户登录自身网站管理后台后台,发生请求到我公司门户网站,如果存在新版本则提示用户更新。客户从我们公司买到的空间、数据库、和网站代码后可以直接根据智能提示完成webconfig配置,后期客户可以从我们手中购买网站模版实现个性化风格主题的网站设置。我们所有客户的网站结构是一模一样的。因为前台客户浏览的页面均为代码自动生成的静态页,所以更新过程不影响访客浏览。
分析:BS架构项目不同与CS架构——通过请求检测版本更新后返回更新包,根据本地安装目录即可完成覆盖更新,我姑且称之为“服务器与客户端的一次往返通信”。BS架构下网站更新实际完成操作是:将资源所在服务器(我公司的服务器)的安装包发送到客户服务器上,实现覆盖更新,我称之为“服务器与服务器之间的通信”。
过程与总结:
起初对于这个课题,我想了个投机取巧的方法。
(1)虚拟目录
网站更新的前提是 我们知道自身资源包(bin文件夹和web页面文件夹)所在的位置,同时也知道客户网站下的安装目录。直接在客户服务器上映射一个虚拟目录,将多个网站指向同一目录下,即可实现一次网站发布便间接更新所有网站。这样的方法无疑是非常致命的,且不说客户的网站是否都在同一台服务器上,单是一个主程序崩盘便能导致所有客户网站瘫痪。
其次,从实际出发,我想到三个解决方案。
(2)File本地物理文件操作法
如果客户服务器与我们的服务器在同一台电脑上,那么网站更新的实质就是把bin文件夹从我们网站的目录下挪到客户网站目录下,进行覆盖。这样的批量复制文件的方法从理论和技术上是可行的。值得一提的是你要具备目标文件夹的读写权限。然而它也有致命的缺陷,即客户服务器和我们的服务器不在同一主机上,我们将无能为力。
(3)FTP上传方法。
用户发送包含自身标识信息的升级请求到我们的服务器,我们解析识别后通过FTP方式静默发送到客户服务器,实现覆盖升级。这里需要考虑的问题是获取用户的FTP信息,这里通过各位看官的需求进行取舍。但这条方式没有被经理采纳,原因是,部分客户网站选择了托管的方式,其网站没有被分配FTP。
(4)WebService和WCF
这是我最终选择并且成功实现的方法。通过安装web服务,进行物理文件的传输,因为每次升级的资源文件在三十兆以内,所以不需要考虑大文件传输带来的宽度占用或者文件丢失等隐患(简单查找了一下资料,大文件传输的技术业已成熟)。
功能刚刚实现,相关代码后期整理。如有需要可以发给大家分享。
非常感谢Coding 狗哥 猫咪 等深爱的友友们献言献策,让我抛弃了一些想法 坚定了一些想法。这个过程的艰难的,最初经理否定了我的解决方案,不是认为不可行就是认为太复杂。给出的意见是参考CS应用程序在线升级,用网上找到的几行代码让我实现功能,又让我参考普通.net fileupload上传控件的原理。至今为止,我都想不到二者之间有什么可以参考和借鉴的地方(看官你要知道跪求告诉我)。
以上所有言论,欢迎各位友友们斧正。下一阶段课题将考虑和解决“在线升级失败的处理”。