C# Enyim Memcached客户端不写/读数据

C# Enyim Memcached客户端不写/读数据,c#,memcached,C#,Memcached,我在Windows上安装了memcached作为服务,监听默认端口11211。我知道这是可行的,因为我可以远程登录到服务器并执行get/set命令,而不会出现任何问题 然后,我下载了Enyim Memcached客户端(Enyim.Caching.dll,版本2.7),并编写了一个简单的测试程序: var mcc = new MemcachedClientConfiguration(); mcc.AddServer("127.0.0.1:11211"); mcc.SocketPool.Recei

我在Windows上安装了memcached作为服务,监听默认端口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"));
}
var mcc=newmemcachedclientconfiguration();
mcc.AddServer(“127.0.0.1:11211”);
mcc.SocketPool.ReceiveTimeout=新的时间跨度(0,0,10);
mcc.SocketPool.ConnectionTimeout=新的时间跨度(0,0,10);
mcc.SocketPool.DeadTimeout=新的时间跨度(0,0,20);
使用(MemcachedClient client=newmemcachedclient(mcc))
{
client.Store(StoreMode.Set,“enyimtest”,“test value”);
Console.WriteLine(client.Get(“enyimtest”);
}
我知道这可以正确地连接到我的服务器,因为在telnet中调用
stats
命令会增加连接数。但是,它不调用get或set,因为
cmd\u get
cmd\u set
stats计数器保持不变。调用
client.Get
返回null

程序不会以任何方式出错。有人知道什么会阻止Enyim客户在这种情况下工作吗

编辑:

看起来这是由超时引起的。在配置log4net以捕获客户端的日志输出后,我发现它包含以下内容(除了其他堆栈跟踪项):

2010-12-17 14:26:37579[1]错误Enyim.Caching.Memcached.MemcachedNode[(null)]-System.IO.IOException:未能从套接字“172.23.0.100:11211”读取。错误:TimedOut

2010-12-17 14:26:37626[1]警告Enyim.Caching.Memcached.MemcachedNode.InternalPoolImpl[(null)]-将节点172.23.0.100:11211标记为已死亡


但我还是不明白为什么会超时?

在玩了一个小时左右后,我找到了答案。我使用Wireshark查看进出服务器的网络流量。我注意到,当使用Enyim客户端时,消息看起来与使用telnet时完全不同。特别是,在使用Enyim客户端时,我无法读取通过网络传输的协议命令

因此,我得出结论,Enyim客户端使用的是不同的协议

在版本1.4中,memcached服务器添加了第二个协议,即二进制协议。在此之前,只支持文本协议。我能找到的memcached的最新Windows二进制文件是来自的,它只有1.2.6版

默认情况下,Enyim客户端配置为使用二进制协议,我的服务器只是忽略了该协议,因为它无法理解

我在我的测试程序中添加了以下行,事情立即开始工作:

mcc.Protocol = MemcachedProtocol.Text;

我遇到了上面同样的问题。我也在努力寻找适用于Windows的memcached的更新版本,但最终还是找到了


我已经添加了最新二进制文件的链接以及其他有用的资源。

谢谢Richard,这节省了我的时间。