0

我在连接C#Python通过Memcached. 我在服务器上安装了 Memcached。AC# 应用程序将使用该Enyim.Caching库在 Memcached 上写入一些数据,然后 Python 应用程序将使用python-memcached(我也尝试过pymemcache)读取它pylibmc。我也想扭转这个过程并让 C# 从 Python 中读取。

我的发现是:

  1. C# 和 Python 都可以写入和读取他们自己在服务器上编写的变量。
  2. 当 C# 编写 astring时,Python 可以很好地检索它。
  3. 其他配置失败并出现以下错误:
    • C#int到 Python 的提升File "C:\Users\...\Anaconda2\envs\py37\lib\site-packages\memcache.py", line 1257, in _recv_value buf = self.decompressor(buf) error: Error -3 while decompressing data: incorrect header check"
    • C#byte到 Python 的提升ValueError: invalid literal for int() with base 10: b' '
    • Pythonstring到 C# 的提升System.ArgumentException: 'Destination array is not long enough to copy all the items in the collection. Check array index and length.'
    • Pythonint到 C# 的提升An unhandled exception of type 'System.NullReferenceException' occurred in testDatabaseC.dll Object reference not set to an instance of an object.
    • Pythonbyte到 C# 的提升System.InvalidCastException: 'Specified cast is not valid.'

字符串可以从 C# 到 Python 的事实让我认为我的代码没有任何问题。此列表中的第一个例外可能表明问题出在使用的压缩格式上。知道这个 Python 库使用zlib,但我还没有找到任何可行的替代方案。

有任何想法吗?谢谢!

下面使用了一些代码:

使用 Python 编写并使用 C# 读取(在这种情况下是 an int,但也可以是 abyte或 a string):

import memcache
memcachedServerIP = "192.168.1.101"
client = memcache.Client([(memcachedServerIP, 11211)])
dataToWrite = 5 # just a random integer to try
print(client.set("key", dataToWrite, time=10))


using System;
using MySql.Data.MySqlClient;
using Enyim.Caching;
using Enyim.Caching.Configuration;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace testDatabase
{
    public class Test
    {
        public static int readFromCache()
        {
            MemcachedClientConfiguration mcc = new MemcachedClientConfiguration();
            MemcachedClient client;
            mcc.AddServer("192.168.1.101: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);
            client = new MemcachedClient(mcc);
            int dataToRead;
            dataToRead = (int)client.Get("key");
            return dataToRead;
        }
    }
}

使用 C# 编写并使用 Python 读取:


using System;
using MySql.Data.MySqlClient;
using Enyim.Caching;
using Enyim.Caching.Configuration;
using RGiesecke.DllExport;
using System.Runtime.InteropServices;

namespace testDatabase
{
    public class Test
    {
        public static int writeToCache()
        {
            MemcachedClientConfiguration mcc = new MemcachedClientConfiguration();
            MemcachedClient client;
            mcc.AddServer("192.168.1.101: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);
            client = new MemcachedClient(mcc);
            int dataToWrite = 5;
            client.Store(Enyim.Caching.Memcached.StoreMode.Set, "key", dataToWrite);
            return dataToWrite;
        }
    }
}
import memcache
memcachedServerIP = "192.168.1.101"
client = memcache.Client([(memcachedServerIP, 11211)])
print(client.get("key"))


4

0 回答 0