كيف يمكنني حل System.Security.SecurityException برمز مخصص في SSRS؟

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

سؤال

لقد قمت بإنشاء تجميع وأشرت إليه في تقرير خدمات التقارير الخاص بي.لقد قمت باختبار التقرير محليًا (يعمل)، ثم قمت بتحميل التقرير إلى خادم التقارير (لا يعمل).

هذا هو الخطأ الذي تم طرحه بواسطة الكود المخصص الذي كتبته.

System.Security.SecurityException:طلب إذن من النوع 'System.Security.Permissions.SecurityPermission ، mscorlib ، الإصدار = 2.0.0.0 ، الثقافة = محايد ، publickeytoken = b77A5C561934E089'.في system.security.codeaccessSecurityEngine.Checknreturnso (إذن ، permtoken ، طلب codeaccesspermission ، stackcrawlmark & ​​stackmark ، int32 unrestricedride ، int32 create) at System.Security.CodeAcessSecurity.Assert في [اسم طريقة SNIDED] في ReportExprhostimpl.CustomCodeproxy. [اسم الطريقة القطع] الإجراء الذي فشل هو:طلب نوع الإذن الأول الذي فشل هو:System.Security.permissions.Securitypermisplish: كان منطقة الجمعية التي فشلت:جهاز الكمبيوتر الخاص بي

هذا المشروع هو شيء ورثته، وأنا لست على دراية به بشكل وثيق.على الرغم من أنني أملك الرمز (الآن)، لذا يمكنني على الأقل العمل معه :)

أعتقد أن الكود الذي فشل هو هذا:

    Dim fio As System.Security.Permissions.FileIOPermission = New System.Security.Permissions.FileIOPermission(Security.Permissions.PermissionState.Unrestricted)
    fio.Assert()

ومع ذلك، فإن هذا النوع من الأشياء موجود في كل مكان أيضًا:

Private Declare Function CryptHashData Lib "advapi32.dll" (ByVal hhash As Integer, ByVal pbData As String, ByVal dwDataLen As Integer, ByVal dwFlags As Integer) As Integer

أستطيع أن أرى أن أيًا من هذه الأشياء لن تستوعبها خدمات التقارير خارج الصندوق.

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

المحلول 2

هذه هي الطريقة التي تمكنت من حل المشكلة:

  • قم بالتوقيع بقوة على التجميع المخصص المعني
  • قم بتعديل ملف rssrvpolicy.config لإضافة أذونات للتجميع

                        <CodeGroup
                            class="UnionCodeGroup"
                            version="1"
                            PermissionSetName="FullTrust"
                            Name="Test"
                            Description="This code group grants the Test code full trust. ">
                            <IMembershipCondition
                                    class="StrongNameMembershipCondition"
                                    version="1"
                                    PublicKeyBlob="0024000004800000940100000602000000240000575341310004000001000100ab4b135615ca6dfd586aa0c5807b3e07fa7a02b3f376c131e0442607de792a346e64710e82c833b42c672680732f16193ba90b2819a77fa22ac6d41559724b9c253358614c270c651fad5afe9a0f8cbd1e5e79f35e0f04cb3e3b020162ac86f633cf0d205263280e3400d1a5b5781bf6bd12f97917dcdde3c8d03ee61ccba2c0"
                                />
                        </CodeGroup>
    

ملاحظة جانبية:إليك طريقة رائعة للحصول على المفتاح العام لتجميعكخدعة VS للحصول على رمز المفتاح العام ونقطة التجميع الموقعة.

نصائح أخرى

<system.web>

<trust level="Full"/>

</system.web>

جرب هذا في web.config

قم بتشغيل الخدمة الخاصة بك في وضع المسؤول

 <CodeGroup class="FirstMatchCodeGroup" version="1" PermissionSetName="FullTrust">

بالنسبة لي، كان الحل هو تغيير السطر أعلاه في ملف rssrvpolicy.config من "None" ل "FullTrust".

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