يواجه SQL Server 2005 مشاكل في الاتصال بموقع ويب يعمل على نفس الخادم

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

سؤال

حدث خطأ أثناء إنشاء اتصال بالخادم.عند الاتصال بـ SQL Server 2005، قد يكون سبب هذا الفشل هو أن SQL Server لا يسمح بالاتصالات عن بعد ضمن الإعدادات الافتراضية.(مزود:موفر توجيهات الإخراج المسمى، خطأ:40 - تعذر فتح اتصال بـ SQL Server)

مرحبًا، أنا جديد في تطوير SQL Server 2005.لقد عملت لعدة سنوات مع SQL Server 2000، ولكن بعد القيام بالأشياء المعتادة التي أقوم بها للاتصال بالخادم، أحصل على هذا الاستثناء على خادم الويب.

هناك عدة روابط على جوجل ترشدني إلى الحلول الممكنة، لكن لم يحل أي منها مشكلتي.لقد قمت بإجراء تغييرات على مربع الحوار "مساحة السطح أيًا كان..." (ما هذا بحق الجحيم؟؟؟لماذا تغير SQL Server كثيرًا ؟؟؟يبدو الأمر معقدًا جدًا الآن).

لقد تأكدت من تكوين SQL Server 2005 بشكل صحيح للسماح بالاتصالات الواردة على مثيل خادم قاعدة البيانات.لقد اخترت أيضا تلقائي كنوع بدء التشغيل لبدء خدمة متصفح SQL Server تلقائيًا في كل مرة يبدأ فيها النظام.ولا، لا يوجد جدار حماية قيد التشغيل.

لقد حاولت تغيير سلسلة الاتصال للاتصال باستخدام منفذ، للاتصال باستخدام IP، للاتصال باستخدام اسم المثيل...

يبدو أن لا شيء يعمل، وما زلت أتلقى نفس الخطأ.أي تلميح؟

الرد على الأسئلة التي طرحها الناس:نعم، يمكنني الاتصال باستخدام استوديو الإدارة من جهاز كمبيوتر مختلف.نعم، أنا متأكد من أنه تم تكوينه لقبول TCP/IP المحلي والبعيد وتوجيهات الإخراج المسماة.نعم، قمت بإعادة تشغيل الخادم.

أنا أستخدم أمان الوضع المختلط، والذي قمت بتمكينه بالفعل.لقد قمت بالفعل بتمكين المستخدم sa.أنا قادر على الاتصال بقاعدة البيانات باستخدام ملف .udl، وتأكدت من أن سلسلة الاتصال الخاصة بي على ما يرام.يمكنني الاتصال بقاعدة البيانات باستخدام أدوات العميل DBArtisan وSQL Server.يمكنني القيام بذلك على الخادم وعلى جهاز مختلف.وحتى مع كل ذلك...

لا يزال الموقع غير قادر على الاتصال.

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

هذه بعض سلاسل الاتصال التي استخدمتها على الخادم:

ConnectionString="Integrated Security=SSPI;مصدر البيانات = الخادم؛الكتالوج الأولي = ديسيبل؛مكتبة الشبكة=DBMSSOCN;"

ConnectionString = "مصدر البيانات = الخادم؛الكتالوج الأولي = ديسيبل؛معرف المستخدم=sa;كلمة المرور=xxxxxx;"

ConnectionString = "مصدر البيانات = SERVER\MSSQLSERVER؛الكتالوج الأولي = ديسيبل؛معرف المستخدم=sa;كلمة المرور=xxxxxx;"

حاولت تسجيل مثيل خادم SQL باستخدام بعض الأوامر الغريبة، وجدت ذلك هنا:http://kb.discountasp.net/article.aspx?id=1041للقيام بذلك استخدمت أداة aspnet_regsql.exe.لا يزال لا يعمل...

وأعلم أيضًا أن الخادم يحتوي على أحدث إصدار من MDAC مثبتًا عليه.الشيء الوحيد الذي أشك فيه هو أن الخادم يحتوي على محركين لقاعدة البيانات:الخادم والخادم\sqlexpress

هل لذلك علاقة بالمشكلة؟

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

المحلول 9

لقد أصلحت المشكلة التي واجهتني مع الاتصال.المشكلة كانت في طلبيكان سبب المشكلة هو أن سلسلة الاتصال بقاعدة بيانات التطوير (بدلاً من قاعدة الإنتاج) تم ترميزها ضمنيًا بواسطة أحد مربعات الحوار التي تنشئ مجموعات البيانات.وضع مربع الحوار هذا سلسلة الاتصال على web.config وعلى ملف كود المصدر المخفي المسمى "Settings.settings.cs".تم حل المشكلة عن طريق تثبيت سلسلة الاتصال في الموقع الصحيح.

كانت رسالة الخطأ مضللة تمامًا، لكنني تمكنت من العثور على ذلك باتباع جميع الطرق المقدمة في تتبع المكدس.

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

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

نصائح أخرى

الشيء الوحيد الذي أشك فيه هو أن الخادم يحتوي على محركين لقاعدة البيانات:الخادم والخادم\sqlexpress

أعتقد أن هذا هو مصدر المشكلة.أي واحد تنوي الاتصال به؟تحتاج إلى تحديد "المثيل" الذي تتصل به.

بافتراض أنك تنوي الاتصال بمثيل SERVER، يجب أن تبدو سلسلة الاتصال الخاصة بك بهذا الشكل (بافتراض اسم المثيل الافتراضي):

مصدر البيانات=الخادم الخاص بك\MSSQLSERVER;الكتالوج الأولي = ديسيبل؛معرف المستخدم=sa;كلمة المرور=xxxxxx;

أو بالنسبة لـ sql Express تبدو سلسلة الاتصال كما يلي:مصدر البيانات=الخادم الخاص بك\sqlexpress;الكتالوج الأولي = ديسيبل؛معرف المستخدم=sa;كلمة المرور=xxxxxx;

هل يمكنك الاتصال بـ SQL Server عبر Management Studio من جهاز مختلف؟قد يساعدك هذا في تضييق نطاق ما إذا كان تكوين SQL Server أو تكوين سلسلة الاتصال.

أعد التحقق من تكوين مساحة السطح، وتأكد من السماح باتصالات TCP/IP.

يمكن أن يكون هذا أشياء كثيرة.أول شيء يجب أن أتحقق منه هو التأكد من أنه يمكنك الاتصال بالخادم باستخدام SQL Server Management Studio.ثانيًا، تحقق من سلسلة الاتصال الخاصة بك للتأكد من صحتها.يجب ألا ينطبق تكوين مساحة السطح على الاتصالات المحلية.

حاول إعادة تثبيت أحدث إصدار من MDAC على الخادم.لقد واجهت مشكلة مماثلة ذات مرة وهذا حلها.

[http://www.microsoft.com/downloads/details.aspx?familyid=6c050fe3-c795-4b7d-b037-185d0506396c&displaylang=en[1]

بناءً على الخطأ، يبدو أن الكود يحاول الاتصال باستخدام توجيهات الإخراج المسماة، بدلاً من TCPIP.قد تحتاج بالفعل إلى الإشارة على وجه التحديد في سلسلة الاتصال الخاصة بك إلى أنه يجب على موفر SQL الاتصال باستخدام tcpip، بحيث تبدو سلسلة الاتصال الخاصة بك كما هو موضح أدناه.

استخدام المصادقة المتكاملة (ويندوز):

الأمان المتكامل = SSPI؛مصدر البيانات=اسم الخادم;الكتالوج الأولي=اسم قاعدة البيانات; مكتبة الشبكة=DBMSSOCN;

باستخدام مصادقة SQL:

المعرف الفريد =اسم المستخدم;الأشخاص ذوي الإعاقة=كلمة المرور;مصدر البيانات=اسم الخادم;الكتالوج الأولي=اسم قاعدة البيانات; مكتبة الشبكة=DBMSSOCN;

لقد رأيت شيئًا مشابهًا لهذا يحدث من قبل، حيث لسبب ما يتم استخدام "الأنابيب المسماة" افتراضيًا كطبقة النقل/الاتصال، خاصة وأن كلاً من تطبيق الويب وخادم SQL يعملان على نفس الجهاز.عادةً ما أستخدم tcpip دائمًا كمكتبة نقل أو شبكة.

أسلوب آخر لاستكشاف الأخطاء وإصلاحها هو استخدام UDL (أو ملف ارتباط البيانات) لاستكشاف أخطاء الاتصال وإصلاحها.يتيح لك هذا التبديل بين موفري الاتصال (ODBC، OLEDB، إلخ) وتعيين خيارات الاتصال الأخرى.

  1. على سطح المكتب العلوي للجهاز، انقر بزر الماوس الأيمن واختر جديد -> مستند نصي.
  2. أعد تسمية الملف *.txt إلى TestConnect.udl (الاسم لا يهم فقط يجب أن يكون امتداده .udl).يجب أن تشاهد الرمز يتغير من رمز ملف نصي إلى رمز يظهر جهاز كمبيوتر أعلى شبكة البيانات، أو شيء من هذا القبيل (وبعبارة أخرى، يجب أن يكون لدى Windows رمز له.).
  3. الآن انقر نقرًا مزدوجًا فوق الملف وسترى ظهور التطبيق الصغير "خصائص ارتباط البيانات".
  4. انقر فوق علامة التبويب "موفر"، وسترى قائمة بموفري الاتصال المختلفين.سأبدأ بمجرد اختيار "Microsoft OLE DB Provider for SQL Server".يمكننا استخدام هذا للتأكد من إمكانية اتصال OLE DB أم لا.
  5. انقر فوق التالي، وأدخل اسم الخادم أو عنوان IP.حدد أمان Windows NT المتكامل.(يمكنك دائمًا العودة وتغييره لاستخدام تسجيل دخول SQL.) عند هذه النقطة يمكنك النقر فوق "اختبار الاتصال".إذا نجح الاتصال، فحدد اسم قاعدة البيانات من القائمة المنسدلة.
  6. أخيرًا، إذا فشل الاتصال، حدد علامة التبويب "الكل"، ثم ابحث عن "مكتبة الشبكة" وقم بتحرير قيمتها، واضبطها على "DBMSSOCN".
  7. ارجع إلى علامة التبويب "الاتصال" وانقر على "اختبار الاتصال" مرة أخرى.
  8. كرر الخطوتين 4 و5 هذه المرة مع تحديد "SQL Native Client".

أتمنى أن يساعدك هذا.

في الموجه يفعل:

أوسقل -E -S

...تحصل على> موجه؟

هل حاولت تحديد اسم المثيل في سلسلة الاتصال؟يبدو أن SQL Server Express، على وجه الخصوص، صعب بشأن الحصول على اسم المثيل.

لقد بدأت أيضًا في التجول باستخدام مدير تكوين SQL Server.فهل قمت بالنقر فوق "تكوين شبكة SQL Server 2005" ثم اطلعت على "بروتوكولات لـ اسم المثيل"؟وقمت بتمكين TCP/IP والموجهات المسماة؟

هل ألقيت نظرة أيضًا على "تكوين عميل SQL الأصلي" --> "بروتوكولات العميل"، وترى أن TCP/IP وموجهات الإخراج المسماة ممكنة هناك أيضًا؟

باستخدام أداة SQL Server 2005 Surface Area Configuration، انقر فوق "Surface Area Configuration for Services and Connections"، ثم ضمن "Database Engine" --> "Remote Connections" ما الذي تم تحديده؟بما أنه يبدو أنك تحاول الاتصال باستخدام توجيهات الإخراج المسماة، فستحتاج إلى التأكد من تحديد "الاتصالات المحلية والبعيدة" و"استخدام كل من tcp/ip وتوجيهات الإخراج المسماة".

كما تعلم على الأرجح، بمجرد إجراء أي تغييرات، يجب عليك إيقاف مثيل خادم SQL وإعادة تشغيله عبر Management Studio (لا تحتاج إلى إعادة تشغيل الجهاز بالكامل، على الرغم من أن إعادة تشغيل الجهاز بالكامل ستوصلك إلى هناك).

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

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