Общий статический объект ASP.NET Webgarden
У меня есть веб-сервис, который должен использовать объект jabber-net для отправки XMPP-сообщений клиентам.
(Он предназначен для обработки печати: когда веб-сервису нужно что-то напечатать, я отправляю сообщение XMPP клиенту форм Windows, работающему на конкретном компьютере, подключенном к принтеру, с типом задания на печать и URL-адресом, а затем клиент загружает данные и отправляет их на принтер. Этот канал связи также будет использоваться для других функций POS, таких как открытие ящиков, обмен данными с чипами и булавками и т. д., поэтому альтернативы печати не будут полезны).
У меня есть статический объект, который содержит экземпляр объекта jabber-net, который подключается к серверу XMPP и затем доступен для отправки сообщений.
Это прекрасно работает однопоточным. Когда я преобразую веб-сервис в веб-сад, чтобы он мог работать более чем с одним потоком, создается впечатление, что каждый поток получает свой собственный экземпляр объекта jabber-net, поэтому все они пытаются войти на сервер XMPP по адресу один раз как один и тот же пользователь, что означает, что его постоянно выгнали.
Вопрос: существует ли какой-либо способ совместного использования живого объекта (который может обрабатывать события, а не сериализованный объект, а не только данные) между всеми потоками в веб-саду, и если да, то каков наилучший способ сделать это?
1 ответ
Веб-сады - это в основном миниатюрные веб-фермы, и к ним следует относиться как к таким - ищите решения, которые будут задействованы в веб-фермах, и те же решения будут применяться в вашем случае.
Меня поймали сеансы и веб-сады, и я в итоге переключился на поставщика сеансов вне процесса (я использовал поставщика на основе memcached, но поставщик SQL Server сработал бы). Вы можете сделать что-то подобное и иметь общего провайдера, с которого каждый поток может запросить объект.
Это не решит проблему с вашими событиями - я сомневаюсь, что это будет решено таким образом, и вам, возможно, придется переключиться на систему обмена сообщениями (например, msmq), где все сообщения обрабатываются одним процессом.