Я не верю, что вы можете (, если только вы не можете заставить этих работников IIS каким-либо образом использовать объекты в общей памяти ).
Это проблема объема. Ваш одноэлементный экземпляр использует пространство процесса в качестве области действия. И, как вы сказали, ваша реализация теперь охватывает несколько процессов. По определению в большинстве операционных систем синглтоны будут привязаны к определенному пространству процесса, поскольку они привязаны к одному экземпляру класса или объекту .
Вам действительно нужен синглтон? Это очень важный вопрос, прежде чем использовать этот шаблон. Как говорится в Википедии, некоторые считают это анти-паттерном (или запахом кода и т. Д.).
Примеры альтернативных конструкций, которые могут работать, включают ...
- Вы можете синхронизировать несколько объектов в центральном хранилище или друг с другом.
- Используйте сериализацию объекта, если применимо.
- Используйте службу Windows и некоторые формы IPC, например. System.Runtime.Remoting.Channels.Ipc
Мне нравится вариант 3 для больших сайтов. Сопутствующая служба Windows очень полезна для крупных веб-сайтов. Многие вещи, такие как отправка почты, пакетные задания и т. Д., Уже должны быть отделены от рабочего процесса обработки внешнего интерфейса. Вы можете вставить объект-сервер singleton в этот процесс и использовать клиентские объекты в рабочих процессах IIS.
Если ваш одноэлементный класс работает с несколькими объектами, которые имеют общее состояние или просто разделяют начальное состояние, то опции 1 и 2 должны работать соответственно.
Редактировать
Судя по вашим комментариям, первый вариант в виде распределенного кэша должен работать для вас.
Существует множество реализаций распределенного кэша.
- Microsoft AppFabric (ранее называвшийся Velocity) - их недавнее движение в это пространство.
- Memcached ASP.Net Provider
- NCache ( Статья MSDN) - Пользовательский поставщик ASP.Net Cache с поддержкой OutProc . Там должны быть другие пользовательские поставщики кэша.
- Развернуть свой собственный распределенный кеш с помощью Windows Services и IPC (вариант 3)
PS. Так как вы специально смотрите в чат. Я определенно рекомендую исследовать Comet ( Реализация Comet для ASP.NET? и WebSync и т. Д.)