سؤال

قمت بإعداد نسخة متطابق قاعدة بيانات ثم استخدمها connectionstring للاتصال به:

    Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks;
    Integrated Security=True;

بعد إضافة بعض البيانات إلى قاعدة البيانات، أقوم بإيقاف تشغيل الخادم الرئيسي، بحيث يصبح خادم المرآة الخادم الرئيسي. أفتح الاتصال مرة أخرى، واحصل على هذا الخطأ:

    System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.)

اعتقدت أنه مع شريك تجاوز الفشل المحدد في سلسلة الاتصال، فإن ADO.NET ستفعل العمل بالنسبة لي. ماذا ينبغي علي فعله الآن؟

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

المحلول

لحسن الحظ، قمت بإصلاح هذه المشكلة. كل ما أحتاج إلى القيام به هو استدعاء طريقة ClearPool:

SqlConnection.ClearPool(conn);

ستقوم هذه الطريقة بمسح تجمع الاتصال. ثم ذهب المشكلة. أنا سعيد جدا به.

شكرا لكم جميعا، لدعمكم. :د

نصائح أخرى

أنا لست خبيرا حول .NET Stuff ولكنك في حاجة إلى عميل SQL الأصلي (SQLNCLI) للتعامل مع الفشل. قد يكون "ADO.NET" SQLOLEDB

ما يصل إلى Windows Server 2003 على الأقل لم يتم تثبيته بشكل افتراضي. إما مستقل أو جزء من أدوات عميل SQL، لذلك أظن أنك تستخدم SQLOLEDB

بعد إيقاف تشغيل المدير، هل تحقق من أن الفشل أصبح فعلا للمدير؟ إذا لم يكن لديك تجاوز فشل تلقائي على خادم SQL، فأنت لا تزال المرآة مرآة.

وجدنا أن هذا سيحدث إذا لم يكن لديك مجموعة كبيرة بما يكفي.

https://serverfault.com/questions/249589/db-auto-failover-in-c-does-not-work-when-the-principal-server-physically-goes-o.

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