不间断地更新服务

时间:2014-03-07 13:54:16

标签: .net wcf iis .net-4.0

我第一次需要更新服务而不会中断。到目前为止,我不得不停止IIS上的应用程序,然后替换文件,然后重新启动应用程序。我需要能够即时热交换此服务以获得新服务。我只需要在现有方法中添加新方法或更正代码。绝不会改变当前存在的方法参数。如果需要,我将创建全新的方法,我的应用程序将慢慢更改为指向新的。

我现在的问题是服务使用其他服务,它们共同形成一个非常高的安全系统,如果我停止服务超过8秒,那么每个使用应用程序的人都会被赶出去。内部的其他服务确实在网络内与该服务进行通信,以及对用户在任何应用程序上执行的每个操作进行身份验证。所以我们有WAN和LAN呼叫。因为这是一个3步认证(如果我们整合联合凭证,可能是4步之后),如果关闭了所有内容,那么一切都会被切断。

我想知道是否有解决方案?

我在考虑连接2项服务的前台服务。一个是Live Service,另一个是备份。当我想要更新时,我切断了Live并且前端将检测到Live服务上没有连接,并且将落在备份服务器上。然后我更换现场并再次在线,前端将开始再次阅读现场直播。几个小时后,我可以用实时副本替换备份以进行下一次更新。 无论如何,这仍然导致前端每次都需要实施新服务的问题。

3 个答案:

答案 0 :(得分:0)

实现这一目标的唯一机会(我认为)如下:

将所有逻辑(将更新)保存在一个单独的库中,该库是动态加载的(并且已卸载[keyword:separate AppDomain] !!)。因此,对于(坏)示例,您可以在每次调用方法时重新加载此程序集。这样,cou可以在不必停止服务的情况下即时取代这个dll。

但这也有一些缺点:例如,这会降低性能。此外,您必须实施自己的安全检查(没有任何恶意黑客,黑客或任何可以用包含危险代码的库替换您的库。

不幸的是,这是我所知道的唯一选择。我希望这可以帮到你一点点。

答案 1 :(得分:0)

您可以创建一个相同的应用程序,并在进行更改之前使用IIS中的DNS更改或简​​单重定向将用户重定向到此。

您提到内部用户建议该应用仅在内部使用?如果是这样,您可以强制您的域/网络上的DNS更改为新的应用程序,他们永远不会知道差异。在此期间,更改您的“实时”应用,然后再次进行反向DNS更改。

如果失败,您可以随时执行更改。每个应用程序都需要一个维护窗口。

答案 2 :(得分:0)

您可以使用WebDeploy - 它可以比您手动完成更快地完成所有操作。它仍然会停止应用程序然后交换文件,然后再次启动应用程序,但在大多数情况下,当我这样做时,没有人注意到(诚然不是繁忙的服务)