كيف يجب أن تضغط الإضافات في AppDomains المقيدة للخدمات المتصاعدة

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

  •  30-09-2019
  •  | 
  •  

سؤال

لقد استخدمت MAF حاليًا لإنشاء نموذج إضافي حيث يتم تحميل الوظائف الإضافية في AppDomain مقيد (إذن الإنترنت). هذا يعني أن الوظيفة الإضافية لا يمكنها استدعاء قاعدة البيانات الخاصة بنا وهو ما نريده في معظم الحالات لأننا نريد منع مؤلفي الوظيفة الإضافية التي تدير أي استعلامات مباشرة مقابل DB.

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

لقد حاولت إعداد AppDomain لعلاج التجميع الذي يحتوي على واجهة برمجة تطبيقات المضيف كتجميع ثقة كاملة أثناء تشغيل الإضافات الإضافية بطريقة مقيدة ، ومع ذلك ما زلت أحصل على SecurityExceptions عندما أحاول فتح اتصال DB.

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

المحلول

حسنًا ، لقد تمكنت من حل هذا. للأشخاص الذين يحتاجون إلى معرفة:

  1. قم بإنشاء مجموعة مع واجهة برمجة تطبيقات المضيف فيه واترك الإضافة للرجوع إليها.
  2. تأكد من أن التجميع الذي يحتوي على واجهة برمجة تطبيقات المضيف يحتوي على سمة [ALTERPARTILLETRUSTEDCALLERS] على مستوى التجميع والاسم القوي للتجميع.
  3. تأكد من تسجيل مجموعة API المضيفة لدى AppDomain كجماعة ثقة كاملة (انظر http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx حول كيفية القيام بذلك).
  4. تأكد من تزيين طرق API المضيفة التي تتطلب أذونات متصاعدة مع SecuritySafecritical سمة (.NET 4).
  5. طلب الثقة الكاملة في بداية كل طريقة تحتاج إلى أذونات متصاعدة ثم إزالة الطلب مباشرة بعد. يوفر الرمز أدناه طريقة تأخذ مندوبًا سيتم تشغيله بثقة كاملة.

    /// <summary>
    /// Runs the supplied delegate using full trust
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="func"></param>
    /// <returns></returns>
    private static T RunWithFullTrust<T>(Func<T> func)
    {
        //NOTE: This line grants the method full trust
        new PermissionSet(PermissionState.Unrestricted).Assert();
    
    
    
    T result = func();
    
    
    //Undo the grant for full-trust!
    CodeAccessPermission.RevertAssert();
    
    
    return result;
    
    }

أيضًا ، قبل تحميل أي الوظائف الإضافية ، تأكد من تحميل واجهة برمجة تطبيقات المضيف في AppDomain المقيد. سيتجنب هذا الاستثناءات التي لا يمكن العثور على مجموعة API المضيفة.

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