我正在开发一个将在世界各地使用的网站,并且必须在地球上的任何时间都是高度可观的。这就是为什么我尝试使用所有可能的技巧来最大限度地减少必须在轻微维护时重新编译/重新启动网站的需要。
Asp.Net MVC能够编辑视图并让框架自动动态地重新编译,而不会中断服务,这非常棒,非常适合我的需求。但是如果我不能以类似的方式编辑底层模型并且必须重新编译整个内容,那么它的兴趣就会受到很大限制。
所以我的问题是:在代码块中的视图本身内部定义视图模型类是否有可能(甚至是一个可怕的,hacky)?
否则,我可以探索哪些路径以实现“热门可编辑”网站(我的意思是:在网站还活着的时候可以重新编译其部分,并立即考虑更改)?
提前非常感谢! : - )
答案 0 :(得分:2)
如果您担心性能和正常运行时间,请考虑使用服务器场来托管您的站点。当您需要进行更新时,您可以单独关闭每个服务器,以便您的站点始终可用。
但是,大多数部署只需几秒钟。您的应用程序可能需要更多或更少的时间来启动(例如,EF视图生成可能需要10-20秒),但只要您在非高峰时段更新就应该没问题。
此外,我绝不会建议更改实时服务器上的代码。你最终会破坏一些东西。
答案 1 :(得分:0)
最终,我设法通过另一种策略实现目标。
所有视图都具有相同的模型DataSource
,其全局是在渲染之前打开并在之后关闭的记录集(如果需要,读取由视图内的Razor代码执行)。
记录集的列列表可能会在不使网站崩溃的情况下更改。
对于表单和验证,从数据库中获取的有关底层存储过程的元数据会导致动态创建c#类型的代码发射,就是这样。尽管每次更改sp时都会生成一个新类型,但应用程序池的回收率可以防止在内存中过多的过时类型。