【问题标题】:Best way to update running code of a .NET server without disconnecting clients在不断开客户端的情况下更新 .NET 服务器的运行代码的最佳方法
【发布时间】:2012-01-20 22:19:21
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您可以使用网络服务(无状态)...客户端连接到“外观/代理”,然后在内部使用网络服务...
  • 我不想使用网络服务,因为我会将数据推送给客户端。

标签: .net dll dynamic mef task-queue


【解决方案1】:
  • 您可以使用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;
       }
    }
}

【讨论】:

  • 并在“// recompose”部分中,我使用 MEF 的功能以某种方式更改 GetData() 的定义,以便它做一些不同的事情?应该这样做。我将尝试实现这一点,然后如果可行,然后再将其设置为可接受的答案。谢谢!
猜你喜欢
  • 2010-10-31
  • 1970-01-01
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-09
相关资源
最近更新 更多