كيف أقوم بتكوين IIS 7 للسماح بتوصيل قاعدة بيانات عن بُعد من داخل خادم ويب ISAPI

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

سؤال

لديّ تطبيق خدمة ويب أصلي (ISAPI) قمت ببنيه مع Delphi 2010. في هذا الوقت ، يعرض طريقتين فقط. تم تصميم أول واحد ، Echostring ، لإعطائي ملاحظات تفيد بأن خدمة الويب تعمل بشكل صحيح ، وتضيف شخصين إلى السلسلة التي أرسلها إليها من عميل خدمة الويب Delphi الخاص بي. هذا يعمل دائمًا بشكل جيد.

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

أنا أستخدم مكونات Ibexpress (IBDatabase ، Ibtransaction ، ibquery ، إلخ) للاتصال بقاعدة بيانات interbase على جانب الخادم.

المشكلة هي أنه بمجرد محاولة توصيل مكون IBDatabase بقاعدة البيانات الخاصة به ، تفشل طريقة الويب. أعتقد أنني استبعدت جميع المصادر الأخرى لهذا الخطأ. يمكنني إنشاء وملء ClientDataset مع XML من عميل كبير إلى حد ما المرسلة من العميل الذي يتضمن مجموعات البيانات المتداخلة دون أي مشاكل (أنا أستخدم وحدة MidasLib ، وبالتالي فإن ClientDataset لا تحاول تحميل DLL). يمكنني إنشاء وتكوين ، أقل من الاتصال بـ IBDATABASE ومكوناتها المختلفة. مرة أخرى ، مع عدم وجود مشاكل. بمجرد تعيين الخاصية المتصلة بمكون IBDATABASE إلى TRUE من داخل خدمة الويب ، فإنه يفشل.

أقوم بتشغيل IIS 7.5 تحت Windows 7 64 بت Ultimate (على جهاز التطوير الخاص بي). لقد حاولت منح حقوق التحكم الكاملة للجميع (وكذلك على وجه التحديد إلى IIS_IUSRS) لكل من ISAPI DLL المحددة ، وكذلك إلى الدليل بأكمله الذي توجد فيه خدمة الويب. إلا أن ذلك لم يحل المشكلة.

أظن أن هذه مشكلة امتيازات تمامًا مع IIS 7. ما الذي يمكنني فعله للسماح لخدمة الويب الخاصة بـ ISAPI للاتصال بأاجهات واجهة برمجة تطبيقات العميل بين اللباز حتى أتمكن من استخدام خدمة الويب للكتابة إلى خادم قاعدة البيانات الخاص بي؟ '' '' '' '' '
Post Script: يبدو أن الاتصال بـ Interbase من خدمة الويب ليس هو المشكلة. ما زلت أتتبع السبب الدقيق ، لكنني تمكنت الآن من الاتصال بنجاح إلى Interbase من داخل خدمة الويب. سأقوم بتحديث هذا المنشور بمجرد أن أعرف السبب ، لكن هذا السؤال لم يعد صالحًا. '' '' '
أنا أشير إلى إجابة بوب باعتبارها الصحيح. كانت سلسلة الاتصال خاطئة. في الواقع (وهذا أمر محرج ، لكنني أفضل أن أكون محرجًا من مضللة) ، لقد حصلت على بعض الشيء مع بند.

لقد قمت بتخزين معلومات الاتصال الخاصة بي في سلاسل الموارد. لقد قمت بالمهمة في أ مع بند. كان اسم سلسلة الموارد لخاصية DatabasEname هو DatabasEname. ال مع تسبب البند في تعيين خاصية DatabasEname لنفسها ، بدلاً من القيمة في سلسلة الموارد. لقد أصلحت المشكلة عن طريق تسوية سلسلة موارد DatabasEname باسم الوحدة (أي ، databasename: = ibmodunit.databasename ؛).

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

المحلول

أفترض أنه يمكنك استخدام نفس سلسلة الاتصال للاتصال بقاعدة بيانات interbase من تطبيق نماذج VCL "الأصلي" على هذا الجهاز؟

ربما يكون سؤال سخيف ، لكن هل تعمل interbase كخدمة؟ (وإلا ، لن يتمكن ISAPI DLL من "رؤيته" للاتصال به).

نصائح أخرى

يحرر
آسف. كتبت شيئًا غبيًا يشير إلى أن IIS لن يكون لها أذونات الشبكةu003Cduh!> ولا يمكنني حذف هذا المنشور!

لكن - لقد قرأت في مكان ما أن أذونات الخدمة على إصدارات Windows اللاحقة قد تم تقليلها إلى حد ما ولم يعد حساب LolalSystem يصل إلى الشبكة. نظرًا لأن العنوان المنشور يحتوي على "Remote" ربما تحتاج إلى منح أذونات إضافية إلى DLL أو الخدمة و/أو خدمة interbase أو واحدة من الملفات الأخرى المعنية؟

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