خطأ CABER NPGSQL Type (كان: أحادي لا يسقط أنواعا معقدة جيدا)

StackOverflow https://stackoverflow.com/questions/1175971

  •  19-09-2019
  •  | 
  •  

سؤال

أنا على حق أن لا يتم تنفيذ أنواع المسلسلات المعقدة في مونو 2.4.2 حتى الآن، أو هل ارتكبت خطأ؟

عند استدعاء وظيفتي عن بعد، أحصل على رسالة خطأ:

Cannot cast from source type to destination type.
   at System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke 
    (System.Runtime.Remoting.Proxies.RealProxy rp, IMessage msg,
     System.Exception& exc, System.Object[]& out_args) [0x00000]

هذه هي الوظيفة البعيدة. حصلت على نفس النتيجة عندما أستخدم string[] في حين أن.string يجعل طريقها من خلال بشكل جيد.

public List<string> GetHist()
{
    NpgsqlConnection conn = new NpgsqlConnection(ConnectStr);
    conn.Open();

    string cmd = "select * from history";
    NpgsqlCommand command = new NpgsqlCommand(cmd, conn);
    List<string> s = new List<string>();

    try
    {
        NpgsqlDataReader dr = command.ExecuteReader();
        if (dr.Read())
        {
            for (int i = 0; i < dr.FieldCount; i++)
                s.Add(dr.GetString(i));
        }
        else
            s.Add("(hehe)");
    }
    finally
    {
        conn.Close();
    }
    return s;
}

المتصل:

List<string> w = remoteClass.GetHist();
foreach (string s in w)
    Console.Write(s + ", ");
Console.WriteLine();

لقد وجدت هذا في http://mono-project.com/faq:technical. :

ماذا عن توافق التسلسل؟ هل يمكنني تسلسل كائن في أحادي وترميزه في MS.NET أو العكس؟

تنسيق التسلسل المنفذ في أحادي متوافق تماما مع تلك من MS.NET. ومع ذلك، فإن وجود تنسيق متوافق لا يكفي. من أجل تبادل الكائنات المسلقة بنجاح، تحتاج الفصول المقابلة إلى نفس الهيكل الداخلي (أي الحقول العامة والخاصة نفسها) في كلا الجانبين.

إذا كنت تسلسل الطبقات الخاصة بك، فلا توجد مشكلة، لأن لديك السيطرة على التجميعات والفئات المستخدمة للاستسلالية.

ومع ذلك، إذا كنت غير متسلسل كائنات من الإطار، فإن توافق التسلسل غير مضمون، لأن الهيكل الداخلي لهذه الكائنات قد يكون مختلفا. لا يتم ضمان هذا التوافق بين إصدارات MS.NET المختلفة أو إصدارات أحادية.

سياستنا هي بذل قصارى جهدنا لجعل فئات الإطارات متوافقة مع أحادية و MS.NET، ولكن في بعض الأحيان هذا غير ممكن لأن التنفيذ الداخلي مختلف جدا. لاحظ أيضا أنه عندما نغير فئة لجعله متوافقا مع MS.NET، فإننا نفقد التوافق مع الإصدارات القديمة من أحادية.

باختصار، إذا كنت تقوم بتصميم تطبيق يعمل في بيئات ومنصات مختلفة غير تحت سيطرتك، والذي يحتاج إلى مشاركة الكائنات المتسلسلة (إما استخدام ملفات التحكم أو الملفات العادية أو أيا كان)، يجب أن تكون حذرا مع الأشياء تشاركها وتجنب الكائنات من الإطار عند الإمكان.

(لاحظ أن هذا ينطبق فقط على Serializers بناء على إطار System.Runtime.Serialization، ولا ينطبق على Xmlserializer).

ومع ذلك، لا يعمل حتى بين Mono-2.4.2 وتطبيق Mono-2.4.2 آخر.

هل كانت مفيدة؟

المحلول

المشكلة في NPGSQL لذلك أقوم بتغيير العنوان. يجب أن يكون هذان السطران ما يعادلني، وأعتقد أنه يجب أن يعود string لكن أول واحد لا يعمل:

dr.GetString(i)
dr[i].ToString()

لجعل تصحيح الأخطاء أكثر صعوبة، مرجبت .NET Remoting الخطأ في جانب المتصل.

نصائح أخرى

.NET التسلسل لا يقوم بالكرد ... حتى الآن ... GRRRRR.

أحادية يمكن أن تكون صعبة ولكن اعتبارا من .NET 2.0، يجب أن تعمل السلسلة []. بالتأكيد، جرب التعليمات البرمجية الخاصة بك على Windows.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top