Недавно я начал размещать свой побочный проект на новых виртуальных машинах Azure. Приложение использует Redis в качестве кеша в памяти. Все работало нормально в моей локальной среде, но теперь, когда я переместил код в Azure, я вижу некоторые странные исключения, исходящие из Booksleeve.
При первом запуске приложения все работает нормально. Однако примерно через 5-10 минут бездействия следующий запрос к приложению вызывает сетевое исключение (я сейчас на работе и у меня нет точных сообщений об ошибках, поэтому я опубликую их, когда вернусь домой, если люди думают, что они имеют отношение к обсуждению) Это приводит к закрытию внутренней MessageQueue, что приводит к тому, что каждый последующий Enqueue() генерирует исключение («Очередь закрыта»).
Итак, немного погуглив, я нашел этот пост SO: Поддержание открытого соединения Redis с помощью BookSleeveо самодельном менеджере соединений. Я, конечно, могу реализовать что-то подобное, если это лучший способ действий.
Итак, вопросы:
conn.SetKeepAlive()
, но пробовал много разных значений, и ни одно из них не помогло.Есть ли в этом что-то еще, или я лаю не по тому дереву?Как я уже сказал, если подключение к Redis не работает после бездействия, я опубликую трассировку стека и исключения из своих журналов, когда вернусь домой.
Спасибо!
ОБНОВЛЕНИЕ Дидье указал в комментариях, что это может быть связано с балансировщиком нагрузки, который использует Azure: http://blogs.msdn.com/b/avkaschauhan/archive/2011/11/12/windows-azure-load- balancer-timeout-details.aspx
Если предположить, что это так, как лучше всего реализовать диспетчер соединений, который мог бы объяснить эту дурацкую проблему. Я предполагаю, что мне не следует создавать соединение на единицу работы, верно?