خطأ تقارير كريستال متقطعة "لا يمكن تقديم الطلب لمعالجة الخلفية".

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

سؤال

نقوم بتشغيل تقارير Crystal على Windows Server 2008 مع .NET Framework 3.5 SP1.

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

  • إنه يؤثر على تقارير مختلفة متعددة لدينا.
  • إنه يؤثر على تقرير معين بشكل متكرر أكثر من التقارير الأخرى.
  • بمجرد أن يتأثر التقرير ، غالبًا ما يظهر الخطأ في تقارير متعددة في نفس الوقت تقريبًا على سبيل المثال. لمدة 10 دقائق القادمة.
  • قد يعمل التقرير نفسه مع نفس المعلمات عند التشغيل مرة أخرى (بعد فترة وجيزة) أو قد يحتاج التطبيق إلى إعادة تشغيل قبل إعادة تشغيل التقرير بنجاح.

كل هذه التقارير عملت سابقا دون مشكلة. لا يوجد تغيير في الخادم أو الرمز يبدو واضحًا مما أدى إلى حدوث هذا الخطأ. كل الرمز وراء هذا هو vb.net

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


"The request could not be submitted for background processing."  
  at CrystalDecisions.ReportAppServer.Controllers.DatabaseControllerClass.ReplaceConnection(Object oldConnection, Object newConnection, Object parameterFields, Object crDBOptionUseDefault)  
  at CrystalDecisions.CrystalReports.Engine.Table.SetDataSource(Object val, Type type)  
  at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)  
--- End of inner exception stack trace ---  
  at CrystalDecisions.ReportAppServer.ConvertDotNetToErom.ThrowDotNetException(Exception e)  
  at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSourceInternal(Object val, Type type)  
  at CrystalDecisions.CrystalReports.Engine.ReportDocument.SetDataSource(DataSet dataSet)  
  at "USER CODE"
هل كانت مفيدة؟

المحلول 3

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

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

نصائح أخرى

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

الشيء هو أن CR لإصدارات VS2008 أو الأحدث ، لا يمكن التعامل مع ملفات JPG في وضع CMYK. يمكن فقط التعامل مع ملفات JPG في وضع RGB.

من المضحك أن الإصدارات السفلية من CR (التي جاءت مع VS2003) يمكن أن تتعامل مع أي نوع من ملفات JPG. شكرا ، كريستال.

بالنسبة لي كانت المشكلة مع تقرير Crystal المؤقت الذي يتم إنشاؤه في مجلد Temp في Windows. هناك حد لعدد التقارير البلورية المؤقتة التي يمكن توليدها بواسطة محرك Crystal Report أثناء معالجته في حلقة. إما أن المساحة في مجلد Temp تنفد بسبب انخفاض الذاكرة في محرك C أو يتم الوصول إلى الحد الأقصى للتقارير ، وبعد ذلك لا يمكن في تقرير Crystal واحد في سباق واحد أكثر. سوف يعطي الخطأ المذكور في السؤال.

بالنسبة لي ، كانت هذه القضية متكررة في كل 500 تقرير تمت معالجتها (كنت أقوم بإنشاء التقارير ، لمدة عام وتصديرها إلى مجلد النظام واحدًا تلو الآخر باستخدام طلبي)

الحل بسيط. قم دائمًا بإغلاق ملف تقرير Crystal المؤقت والتخلص منه بعد تصديره .



    for i as integer=0 to reportcount -1
        Dim rpt as New MyCrystalReport
        Dim filename as String = "MyReport" & i & ".Pdf"
        //Query the DB obtain the dataset then set the datasource to the report
        ...
        //Export the report
       rpt.ExportToDiskCrystalDecisions.Shared.ExportFormatType.PortableDocFormat,fileName)
        rpt.Close()
        rpt.Dispose()
    next


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

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

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

جرب هذا: إذا تركت أي مساحة فارغة في Crystal Report (رأس أو تذييل أو أي أقسام) قم بقمعها. هذا كل شئ. لقد واجهت هذه المشكلة وأصلحت بهذه الطريقة.

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