在不断开客户端连接的情况下更新.NET服务器运行代码的最佳方法

时间:2011-12-15 07:14:21

标签: .net dll dynamic mef task-queue

在.NET中创建可以在运行时更改的服务器端代码的最佳技术或技术是什么?

由于无状态模型,当您使用Web服务时,您可以免费获得此功能,但我正在构建客户端/服务器体系结构,其中客户端通过TCP连接其会话的生命周期。

如何在不断开用户连接并重新启动服务器的情况下实施更改?显然,连接管理代码和API不会改变,否则会很快破坏。

是否使用MEF?某种影子副本?我宁愿不使用消息队列和多个进程。

1 个答案:

答案 0 :(得分:2)

  • 您可以使用MEF's Recomposition
  • 摘要服务器将数据传输到另一个对象的方式
  • 在此对象内,剥离后台线程以检查更新
  • 当更新可用时,锁定一个对象,以便客户端在您更新时无法获取数据

服务器端公共API

public SomeDataModel SomeGetDataMethod(...)
{
   // auth
   return someObject.GetData(); // GetData() methods abstracted
}

服务器端内部

public SomeObject
{
    public SomeObject()
    {
        // spin off a background thread to check for updates
    }

    private void OnUpdateAvail() 
    {
       lock(recomposeLock)
       {
            // recompose
       }
    }

    public SomeDataModel GetData()
    {
       lock(recomposeLock)
       {
            // get your data
            return someDataModel;
       }
    }
}