2

Membase Serverを正常にインストールしましたが、「サブミリ秒のアクセス遅延」機能により、実際にこの質問を書く必要があります。そうしないと、すでに10回MongoDBに切り替えてしまいます。質問:Membase Serverを適切にインストールして構成したので、.NETクライアントアプリケーションがこのデータベースにアクセスできるようにします。この目的のために、Enyim.NETクライアントを使用しています。私は次のテストアプリケーションを作成しました。

using System;
using System.Linq;
using System.Diagnostics;

using Membase;
using Membase.Configuration;

namespace CouchDB
{
    class MainClass
    {
        public static void Main(string[] args)
        {
            var config = new MembaseClientConfiguration()
            {
                Bucket = "helloworld",
                BucketPassword = "123",
                NodeLocator = typeof(Enyim.Caching.Memcached.DefaultNodeLocator),
                Transcoder = new Enyim.Caching.Memcached.DefaultTranscoder(),
                KeyTransformer = new Enyim.Caching.Memcached.TigerHashKeyTransformer(),
                PerformanceMonitorFactory = null // I'm on Mac OS X
            };

            config.SocketPool.MinPoolSize = 10;
            config.SocketPool.MaxPoolSize = 20;
            config.SocketPool.DeadTimeout = TimeSpan.FromSeconds(10);
            config.SocketPool.ConnectionTimeout = TimeSpan.FromSeconds(5);
            config.Urls.Add(new Uri("http://localhost:8091/pools/default"));

            var client = new MembaseClient(config);


            var spoon = client.Get<String>("Spoon");

            Console.WriteLine(spoon);
        }
    }
}

クライアントを作成しようとすると問題が発生し、完全なスタックも表示されない例外が発生します。

「送信元タイプから宛先タイプにキャストできません」

System.Web.Script.Serialization.JavaScriptSerializer..ctor(resolver = null、registerConverters = false)で

4

1 に答える 1

1

私はこの問題に数時間を費やしました。Monoランタイムにバグがあり(2.10.5 AFAIKにはまだ存在します)、System.Web.Extensionsの2つのバージョン(3.5と4.0)の間で競合が発生します。

Membaseクライアント(および現在はCouchbaseクライアント)に提供されているDLLは、3.5バージョンにリンクされています。4.0バージョンを参照しているものはわかりませんが、それでも何かがあります。したがって、解決策はリダイレクトを適用することです(私はそれをテストしていません):

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <dependentAssembly>
        <assemblyIdentity name="System.Web.Extensions"
                          publicKeyToken="31bf3856ad364e35"
                          culture="neutral" />
        <bindingRedirect oldVersion="3.5.0.0"
                         newVersion="4.0.0.0"/>
     </dependentAssembly>
  </assemblyBinding>
</runtime>

または、クライアントを再コンパイルします(これは私が行ったことです)。モノラルでクライアントをコンパイルする場合、2つの小さな問題があります。MemcachedNode.csには、Failedイベントの明示的な実装があります。不要なので(他に競合するFailedイベントは実装されていません)、行を削除するだけで済みます。また、削除できるSetTcpKeepAliveがあります(安全だと思います)。

于 2012-03-30T06:55:05.970 に答える