سؤال

نحن نستخدم TIBCO EMS من تطبيق ASP.NET 3.5 لواجهة واحدة إلى نظام خارجي ، ويبدو أنه يعمل بشكل جيد - باستثناء أن الرجال الذين يديرون الجانب الآخر يخبرنا أننا نرفع اتصالات مثل الجنون وليس أبدًا إغلاقهم ....

ما أفعله هو توجيه كل حركة المرور من خلال فئة واحدة مع متغيرات الأعضاء الثابتة لكل من Tibco ConnectionFactory و ال Connection نفسها ، بعد أن قيل لهم إن إنشاءها هو موارد كبيرة ومكثفة للوقت:

private static ConnectionFactory Factory
{
    get
    {
        if (HttpContext.Current.Application["EMSConnectionFactory"] == null)
        {
           ConnectionFactory connectionFactory = CreateTibcoFactory();
           HttpContext.Current.Application["EMSConnectionFactory"] = connectionFactory;
        }

        return HttpContext.Current.Application["EMSConnectionFactory"] as ConnectionFactory;
    }
}

private static Connection EMSConnection
{
    get
    {
        if (HttpContext.Current.Application["EMSConnection"] == null)
        {
           Connection connection = Factory.CreateConnection(*username*,  *password*);
           connection.ExceptionHandler += new EMSExceptionHandler(TibcoConnectionExceptionHandler);
           connection.Start();
           HttpContext.Current.Application["EMSConnection"] = connection;
        }

        return HttpContext.Current.Application["EMSConnection"] as Connection;
     }
 }

الآن مشكلتي هي: أين وكيف يمكنني

  • أخبر اتصال Tibco بـ "الإقامة التلقائية" عندما لم يعد هناك حاجة إليه (مثل مع SqlConnection)
  • أغلق اتصال Tibco على خطأ
  • أغلق اتصال Tibco قبل انتهاء تطبيق ASP.NET الخاص بنا (أو يسجل المستخدم)

لا يبدو أنني أجد الكثير من المعلومات المفيدة حول كيفية استخدام TIBCO EMS من عالم C# / .NET ...... أي محتجز ؟؟ شكرًا!!

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

المحلول

أولاً ، لا أفهم كيف يمكن أن تنفد من الاتصالات. نظرًا لأنك تقوم بتخزين الاتصال في التطبيق ، يجب أن يكون لديك اتصال واحد فقط لتطبيق IIS بالكامل.

التي وضعت جانبا ، سأفعل ما يلي:

  • عندما يتم استرداد الاتصال ، قم بإنشاء الاتصال كما تفعل الآن ؛
  • بعد إنشاء الاتصال ، قم بتدوير موضوع خلفية ؛
  • تعيين أ DateTime إلى DateTime.Now;
  • دع الخلفية تحقق (على سبيل المثال كل ثانية أو كل 10 ثوان) ما هو الفرق بين التاريخ الذي حددته و DateTime.Now. إذا كان هذا أطول من مهلة محددة ، اقتل الاتصال وضبط Application["EMSConnectionFactory"] إلى لاغ.
  • عندما يقتل مؤشر ترابط الخلفية الاتصال ، أغلق موضوع الخلفية ؛
  • في كل مرة يتم فيها طلب الاتصال ، أعد ضبط وقت البياناتtoDateTime.Now`.

بهذه الطريقة ، يجب إغلاق الاتصالات تلقائيًا.

لاحظ أنه سيتعين عليك تقديم القفل. يمكنك استخدام Application.Lock() و Application.Unlock() لهذا.

فيما يتعلق بالإغلاق على خطأ: أرى أنك ترفع معالج استثناء بمثيل الاتصال. ألا يمكنك إغلاق الاتصال بهذا؟

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