Я установил memcached на Windows в качестве службы, прослушивая порт по умолчанию 11211. Я знаю, что это работает, потому что я могу подключиться к серверу и выполнять команды get/set без каких-либо проблем.
Затем я загрузил клиент Enyim Memcached (Enyim.Caching.dll, версия 2.7) и написал простую тестовую программу:
var mcc = new MemcachedClientConfiguration();
mcc.AddServer("127.0.0.1:11211");
mcc.SocketPool.ReceiveTimeout = new TimeSpan(0, 0, 10);
mcc.SocketPool.ConnectionTimeout = new TimeSpan(0, 0, 10);
mcc.SocketPool.DeadTimeout = new TimeSpan(0, 0, 20);
using (MemcachedClient client = new MemcachedClient(mcc))
{
client.Store(StoreMode.Set, "enyimtest", "test value");
Console.WriteLine(client.Get<string>("enyimtest"));
}
Я знаю, что это правильно подключается к моему серверу, так как вызов команды stats
в telnet показывает увеличение количества подключений. Однако он не вызывает get или set, поскольку счетчики статистики cmd_get
и cmd_set
остаются постоянными. Вызов client.Get
возвращает null.
Программа не вызывает никаких ошибок. Кто-нибудь знает, что может помешать клиенту Enyim работать в этой ситуации?
EDIT:
Похоже, это вызвано таймаутом. Afer, настраивая log4net для захвата вывода журнала регистрации клиента, я обнаружил, что он содержит следующее (в дополнение к другим элементам трассировки стека):
2010-12-17 14: 26: 37,579 [1] ERROR Enyim.Caching.Memcached.MemcachedNode [(null)] - System.IO.IOException: Не удалось прочитать из сокета '172.23.0.100:11211'. Ошибка: TimedOut
2010-12-17 14: 26: 37,626 [1] WARN Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl [(null)] - Маркировка node 172.23.0.100:11211 как мертвая
Я до сих пор не понимаю, почему это тайм-аут, хотя?