Ограничение .NET Class одним экземпляром объекта на границе компьютера => "межпроцессный синглтон" - PullRequest
0 голосов
/ 08 августа 2009

Я хочу, чтобы один объект некоторого класса .NET использовался несколькими процессами на одном компьютере.

Имея домены приложений, нелегко перейти через эту границу, но отображенные в память файлы в .NET 4.0 должны каким-то образом облегчить эту задачу.

Пока .NET 4.0 не выйдет в финальной версии ... Можно ли сделать какой-то "межпроцессный синглтон" в C #?

Ответы [ 3 ]

4 голосов
/ 08 августа 2009

Да, вы можете создать синглтон .Net Remoting в одном процессе и предоставить его другим процессам, работающим на том же компьютере, через Remoting ...

РЕДАКТИРОВАТЬ: в .Net 2.x вам необходимо использовать решение для удаленного взаимодействия, но в .Net 3.x или более поздней версии (где доступен WCF) эта же функциональность может быть доступной с использованием WCF ( Проверьте это) ...

2 голосов
/ 09 августа 2009

Вы можете использовать глобальный мьютекс.

Threading в C # имеет хороший пример (скопированный ниже для удобства) о том, как использовать именованный мьютекс для проверки того, что на машине может выполняться только один экземпляр приложения.

Вы можете расширить этот пример, чтобы убедиться, что существует только один экземпляр объекта.

class OneAtATimePlease {
  // Use a name unique to the application (eg include your company URL)
  static Mutex mutex = new Mutex (false, "oreilly.com OneAtATimeDemo");

  static void Main() {
    // Wait 5 seconds if contended – in case another instance
    // of the program is in the process of shutting down.

    if (!mutex.WaitOne (TimeSpan.FromSeconds (5), false)) {
      Console.WriteLine ("Another instance of the app is running. Bye!");
      return;
    }
    try {
      Console.WriteLine ("Running - press Enter to exit");
      Console.ReadLine();
    }
    finally { mutex.ReleaseMutex(); }
  }
}

Есть еще одна вещь, на которую вам может понадобиться обратить внимание.

Когда использует именованный мьютекс на сервере, работающем в службах терминалов , именованный мьютекс может иметь два уровня видимости, Глобальный для всех сеансов (имя с префиксом "Global\ ") или Local для сеанса сервера терминалов (имя с префиксом" Local\ ", будет использоваться по умолчанию, если префикс не указан).

Подробнее о Mutex вы можете узнать в MSDN: Mutex Class .

0 голосов
/ 26 октября 2009

Установите вашу .net dll в глобальный кеш сборок. Тогда на него может ссылаться любое приложение на компьютере.

...