إعادة هيكلة مجموعة الاتصالات

مع إصدار Aspose.Email 19.3، تم إعادة هيكلة مجموعة الاتصالات. الجديد  EmailClient تم تقديم صف سيحل في النهاية محل الـ CredentialsByHostClient الفئة. الـ EmailClient الصف يوفر ConnectionAsgmtMode الخاصية التي تحدد وضع تخصيص الاتصال في بيئة متعددة الخيوط. EmailClient.ConnectionAsgmtMode يتم تعيينه باستخدام الـ ConnectionAsgmtType قابلة للتعداد.

أنواع الاتصالات

هناك الأنواع الثلاثة التالية للاتصالات:

  • الاتصال الرئيسي: هذا هو الاتصال الذي يتم إنشاؤه وإلغاء تخصيصه مع عميل البريد. لا يمكن إنشاؤه أو إلغاء تخصيصه يدويًا.
  • الاتصال الافتراضي: يمكن للمستخدم إنشاء اتصالات افتراضية للخيوط باستخدام CreateConnection طريقة. إذا كان الاتصال الافتراضي موجودًا، فإن جميع طرق عميل البريد التي تُنفّذ في خيط ستستخدم هذا الاتصال ضمنيًا. يمكن أن يكون هناك اتصال افتراضي واحد فقط لكل خيط. يمكن إنشاؤه يدويًا أو تلقائيًا. ذلك يعتمد على خاصية EmailClient.ConnectionAsgmtMode. يمكن إنشاء هذه الاتصالات يدويًا باستخدام EmailClient.CreateConnection(createAsDefaultConnection = true) طريقة. إذا لم يتم استخدام الاتصال الافتراضي (حسب وضع تخصيص الاتصال)، يُستخدم الاتصال الرئيسي ضمنيًا بدلاً منه.
  • الاتصالات المستقلة: هذه هي الاتصالات التي لا ترتبط بالخيوط. يمكن إنشاؤها يدويًا ويجب استخدامها صراحةً كمعامل للطريقة. يمكن إنشاء هذه الاتصالات يدويًا باستخدام EmailClient.CreateConnection() طريقة أو EmailClient.CreateConnection(createAsDefaultConnection = false) طريقة.

أنواع تخصيص الاتصال

لإعداد الـ EmailClient.ConnectionAsgmtMode خاصية، ConnectionAsgmtType القائمة القابلة للتعداد مُستخدمة. أنواع التخصيص المقدمة من ConnectionAsgmtType مذكورة أدناه.

  • ConnectionAsgmtType.UseMainOrDefault: يُستخدم هذا الوضع افتراضيًا في عملاء البريد. يستخدم عميل البريد الاتصال الرئيسي لجميع العمليات من خيوط متعددة إذا لم يتم إنشاء اتصال افتراضي، أو إذا لم يُمرَّ اتصال كمعامل صريح للطريقة. الاتصال الرئيسي هو الاتصال الذي يُنشأ في نفس وقت إنشاء عميل البريد. يمكن للمستخدم إنشاء اتصالات افتراضية للخيوط باستخدام CreateConnection طريقة. إذا تم إنشاء اتصال افتراضي لخيط، يُستخدم ضمنيًا لجميع طرق عميل البريد التي تُستدعي في هذا الخيط. إذا لم يتم إنشاء اتصال افتراضي لخيط، يُستخدم الاتصال الرئيسي لجميع طرق عميل البريد التي تُستدعي في هذا الخيط. يمكن للمستخدم أيضًا إنشاء اتصالات غير مرتبطة بالخيوط (غير اتصالات افتراضية) باستخدام CreateConnection طريقة. إذا أراد المستخدم استخدام اتصالات أخرى (ليس الرئيسي ولا الافتراضي) يجب عليه تمرير هذا الاتصال صراحةً كمعامل للطريقة التي يرغب في استخدامها. يمكن للمستخدم أيضًا إنشاء أي عدد من الاتصالات. يمكن أن يكون هناك اتصال افتراضي واحد فقط لكل خيط. يرجى ملاحظة أن الاتصالات الافتراضية تعمل بشكل صحيح إذا كان المستخدم يستخدم كائنات Thread للبرمجة المتعددة المهام. إذا استخدم المستخدم ConnectionPool أو كائنات Task للبرمجة المتعددة المهام، قد يؤدي هذا الوضع إلى سلوك خاطئ للتطبيق. لتجنب هذه المشكلة، يجب على المستخدم إلغاء تخصيص الاتصال الافتراضي يدويًا (إذا كان يستخدمه) في نهاية تنفيذ الشيفرة.
  • ConnectionAsgmtType.UseMain: يستخدم عميل البريد الاتصال الرئيسي لجميع العمليات من خيوط متعددة. الاتصال الرئيسي هو الاتصال الذي يُنشأ في نفس وقت إنشاء عميل البريد. لا يستطيع المستخدم إنشاء اتصالات افتراضية. يمكن للمستخدم إنشاء اتصالات غير مرتبطة بخيوط (ليست اتصالات افتراضية) باستخدام الـ CreateConnection طريقة. إذا أراد المستخدم استخدام اتصالات أخرى (ليس الرئيسي ولا الافتراضي) يجب عليه تمرير هذا الاتصال صراحةً كمعامل للطريقة التي يرغب في استخدامها. 
  • ConnectionAsgmtType.UseDefault: يستخدم عميل البريد بشكل ضمني الاتصالات الافتراضية فقط لجميع العمليات من خيوط متعددة. لا يُستَخدم الاتصال الرئيسي في هذا الوضع. إذا لم يتم إنشاء اتصال افتراضي لبعض الخيط (أول استدعاء لطريقة عميل البريد)، يُنشئ عميل البريد اتصالًا افتراضيًا ضمنيًا للخيط قبل تنفيذ أول عملية. لا يمكن للمستخدم إنشاء اتصالات افتراضية للخيوط باستخدام CreateConnectionطريقة لأنه يتم إنشاؤها تلقائيًا. عندما يتم إنشاء اتصال افتراضي لخيط، يُستخدم ضمنيًا لجميع طرق عميل البريد التي تُستدعي في هذا الخيط. يمكن للمستخدم أيضًا إنشاء اتصالات غير مرتبطة بالخيوط (غير اتصالات افتراضية) باستخدام CreateConnectionطريقة. إذا أراد المستخدم استخدام اتصالات أخرى (ليس الرئيسي ولا الافتراضي) يجب عليه تمرير هذا الاتصال صراحةً كمعامل للطريقة التي يرغب في استخدامها. يمكن للمستخدم إنشاء أي عدد من الاتصالات إضافيًا. يمكن استخدام اتصال افتراضي واحد فقط لكل خيط. يرجى ملاحظة أن الاتصالات الافتراضية تعمل بشكل صحيح إذا كان المستخدم يستخدم كائنات Thread للبرمجة المتعددة المهام. إذا استخدم المستخدم ConnectionPool أو كائنات Task للبرمجة المتعددة المهام، قد يؤدي هذا الوضع إلى سلوك غير صحيح للتطبيق. لتجنب هذه المشكلة، يجب على المستخدم إلغاء تخصيص الاتصال الافتراضي يدويًا في نهاية تنفيذ الشيفرة.