استثناءات مراسلة مراكز الأحداث - NET. (قديم)
يسرد هذا القسم استثناءات NET. التي تم إنشاؤها بواسطة NET. Framework APIs.
هام
تنطبق بعض الاستثناءات المدرجة في المقالة فقط على مكتبة . NET لمراكز الأحداث القديمة. على سبيل المثال: استثناءات .Microsoft.ServiceBus.*
للحصول على معلومات حول EventHubsException التي أثارتها مكتبة NET. الجديدة، راجع EventHubsException - .NET
في 30 سبتمبر 2026، سنتقاعد مكتبات SDK ناقل خدمة Azure WindowsAzure.ServiceBus وMicrosoft.Azure.ServiceBus و com.microsoft.azure.servicebus، والتي لا تتوافق مع إرشادات Azure SDK. سننهي أيضا دعم بروتوكول SBMP، لذلك لن تتمكن من استخدام هذا البروتوكول بعد 30 سبتمبر 2026. قم بالترحيل إلى أحدث مكتبات Azure SDK، والتي توفر تحديثات أمان هامة وقدرات محسنة، قبل ذلك التاريخ.
على الرغم من أنه لا يزال من الممكن استخدام المكتبات القديمة بعد 30 سبتمبر 2026، إلا أنها لن تتلقى بعد ذلك الدعم والتحديثات الرسمية من Microsoft. لمزيد من المعلومات، راجع إعلان إيقاف الدعم.
فئات الاستثناء
تنشئ واجهات برمجة التطبيقات NET. API لمراكز الأحداث استثناءات يمكن أن تندرج في الفئات التالية، إلى جانب الإجراء المرتبط الذي يمكنك اتخاذه لمحاولة إصلاحها:
خطأ ترميز المستخدم:
- System.ArgumentException
- System.InvalidOperationException
- System.OperationCanceledException
- System.Runtime.Serialization.SerializationException
الإجراء العام: حاول إصلاح التعليمة البرمجية قبل المتابعة.
خطأ في الإعداد/التكوين:
- Microsoft.ServiceBus.Messaging.MessagingEntityNotFoundException
- Microsoft.Azure.EventHubs.MessagingEntityNotFoundException
- System.UnauthorizedAccessException
الإجراء العام: راجع التكوين الخاص بك وقم بالتغيير إذا لزم الأمر.
استثناءات عابرة:
- Microsoft.ServiceBus.Messaging.MessagingException
- Microsoft.ServiceBus.Messaging.ServerBusyException
- Microsoft.Azure.EventHubs.ServerBusyException
- Microsoft.ServiceBus.Messaging.MessagingCommunicationException
الإجراء العام: أعد محاولة العملية أو قم بإعلام المستخدمين.
استثناءات أخرى:
- System.Transactions.TransactionException
- System.TimeoutException
- Microsoft.ServiceBus.Messaging.MessageLockLostException
- Microsoft.ServiceBus.Messaging.SessionLockLostException
الإجراء العام: خاص بنوع الاستثناء؛ الرجوع إلى الجدول في القسم التالي.
أنواع الاستثناءات
يسرد الجدول التالي أنواع استثناء المراسلة وأسبابه، ويلاحظ الإجراء المقترح الذي يمكنك اتخاذه.
نوع الاستثناء | الوصف/السبب/الأمثلة | الإجراء المقترح | ملاحظة حول إعادة المحاولة التلقائية/الفورية |
---|---|---|---|
TimeoutException | لم يستجب الخادم للعملية المطلوبة خلال الوقت المحدد، والذي يتم التحكم فيه بواسطة OperationTimeout. قد يكون الخادم قد أكمل العملية المطلوبة. يمكن أن يحدث هذا الاستثناء بسبب الشبكة أو التأخيرات الأخرى في البنية التحتية. | تحقق من حالة النظام من أجل التناسق وأعد المحاولة إذا لزم الأمر. راجع TimeoutException . |
قد تساعد إعادة المحاولة في بعض الحالات؛ إضافة منطق إعادة المحاولة إلى التعليمات البرمجية. |
InvalidOperationException | عملية المستخدم المطلوبة غير مسموح بها داخل الخادم أو الخدمة. انظر رسالة الاستثناء للحصول على التفاصيل. على سبيل المثال، يقوم الخيار Complete بإنشاء هذا الاستثناء إذا تم استلام الرسالة في وضع ReceiveAndDelete . | تحقق من التعليمة البرمجية والوثائق. تأكد من صحة العملية المطلوبة. | إعادة المحاولة لن تفيد. |
OperationCanceledException | جرت محاولة لاستدعاء عملية على عملية تم إغلاقه بالفعل أو إجهاضه أو التخلص منه. في حالات نادرة، يتم بالفعل التخلص من العملية المحيطة. | تحقق من التعليمة البرمجية وتأكد من أنه لا يستدعي عمليات على كائن تم التخلص منه. | إعادة المحاولة لن تفيد. |
UnauthorizedAccessException | تعذر على العنصر TokenProvider الحصول على رمز مميز، أو أن الرمز المميز غير صالح أو أن الرمز المميز لا يحتوي على المطالبات المطلوبة لإجراء العملية. | تأكد من إنشاء موفر الرمز المميز بالقيم الصحيحة. تحقق من تكوين خدمة التحكم بالوصول. | قد تساعد إعادة المحاولة في بعض الحالات؛ إضافة منطق إعادة المحاولة إلى التعليمات البرمجية. |
ArgumentException ArgumentNullException ArgumentOutOfRangeException |
هناك وسيطة واحدة أو أكثر غير صالحة تم توفيرها للطريقة. يحتوي URI المقدم إلى NamespaceManager أو Createعلى جزء (أجزاء) من خط. مخطط URI المقدم إلى NamespaceManager أو Create غير صالح. قيمة الخاصية أكبر من 32 كيلوبايت. | تحقق من كود الاستدعاء وتأكد من صحة المعطيات. | إعادة المحاولة لن تساعد. |
Microsoft.ServiceBus.Messaging MessagingEntityNotFoundException Microsoft.Azure.EventHubs MessagingEntityNotFoundException |
الكيان المرتبط بالعملية غير موجود أو تم حذفه. | تأكد من وجود الكيان. | إعادة المحاولة لن تساعد. |
MessagingCommunicationException | العميل غير قادر على إنشاء اتصال بمراكز الأحداث. | تأكد من أن اسم المضيف المقدم صحيح وأن المضيف يمكن الوصول إليه. | قد تساعد إعادة المحاولة في حالة وجود مشكلات اتصال متقطعة. |
Microsoft.ServiceBus.Messaging ServerBusyException Microsoft.Azure.EventHubs ServerBusyException |
الخدمة غير قادرة على معالجة الطلب في الوقت الحالي. | يمكن للعميل الانتظار لفترة من الوقت، ثم إعادة محاولة العملية. راجع ServerBusyException. |
يمكن للعميل إعادة المحاولة بعد فاصل زمني معين. إذا أدت إعادة المحاولة إلى استثناء مختلف، فتحقق من سلوك إعادة المحاولة لهذا الاستثناء. |
MessagingException | استثناء عام في المراسلة يمكن طرحه في الحالات التالية: جرت محاولة لإنشاء QueueClient باستخدام اسم أو مسار ينتمي إلى نوع كيان مختلف (على سبيل المثال، موضوع). جرت محاولة لإرسال رسالة أكبر من 1 ميغابايت. واجه الخادم أو الخدمة خطأ أثناء معالجة الطلب. انظر رسالة الاستثناء للحصول على التفاصيل. هذا الاستثناء هو عادة استثناء عابر. | تحقق من التعليمة البرمجية وتأكد من استخدام العناصر القابلة للتسلسل فقط لنص الرسالة (أو استخدم محول تسلسلي مخصص). تحقق من الوثائق الخاصة بأنواع القيم المدعومة للخصائص واستخدم الأنواع المدعومة فقط. تحقق من الخاصية IsTransient. إذا كانت true، فيمكنك إعادة محاولة العملية. | سلوك إعادة المحاولة غير محدد وقد لا يفيد. |
MessagingEntityAlreadyExistsException | محاولة إنشاء كيان باسم مستخدم بالفعل بواسطة كيان آخر في مساحة اسم الخدمة هذه. | احذف الكيان الحالي أو اختر اسماً مختلفاً للكيان الذي سيتم إنشاؤه. | إعادة المحاولة لن تساعد. |
QuotaExceededException | وصل كيان المراسلة إلى الحد الأقصى للحجم المسموح به. يمكن أن يحدث هذا الاستثناء إذا كان الحد الأقصى لعدد أجهزة الاستقبال (وهو 5) قد تم فتحه بالفعل على مستوى مجموعة لكل مستهلك. | قم بإنشاء مساحة في الكيان من خلال تلقي رسائل من الكيان أو قوائمه الفرعية. راجع QuotaExceededException |
قد تساعد إعادة المحاولة إذا تمت إزالة الرسائل في هذه الأثناء. |
MessagingEntityDisabledException | طلب عملية وقت التشغيل على كيان معطل. | تفعيل الكيان. | قد تساعد إعادة المحاولة إذا تم تنشيط الكيان في الفترة المؤقتة. |
Microsoft.ServiceBus.Messaging MessageSizeExceededException Microsoft.Azure.EventHubs MessageSizeExceededException |
تتجاوز حمولة الرسالة حد 1 ميغابايت. هذا الحد الذي يبلغ 1 ميغابايت مخصص للرسائل الإجمالية، والتي يمكن أن تتضمن خصائص النظام وأي حمل إضافي لـ NET. | قم بتقليل حجم بيانات الرسالة الأساسية، ثم أعد محاولة العملية. | إعادة المحاولة لن تساعد. |
QuotaExceededException
يشير QuotaExceededException إلى أنه تم تجاوز حصة كيان معين.
يمكن أن يحدث هذا الاستثناء إذا تم بالفعل فتح الحد الأقصى لعدد أجهزة الاستقبال (5) على مستوى مجموعة لكل مستهلك.
مراكز الأحداث
تحتوي مراكز الأحداث على حد أقصى يبلغ 20 مجموعة مستهلكين لكل مراكز الأحداث. عندما تحاول إنشاء المزيد، تتلقى QuotaExceededException .
TimeoutException
يشير TimeoutException إلى أن العملية التي بدأها المستخدم تستغرق وقتاً أطول من مهلة العملية.
بالنسبة لمراكز الأحداث، يتم تحديد المهلة إما كجزء من سلسلة الاتصال أو من خلال ServiceBusConnectionStringBuilder . قد تختلف رسالة الخطأ نفسها، لكنها تحتوي دائماً على قيمة المهلة المحددة للعملية الحالية.
من المتوقع أن تحدث المهلات أثناء عمليات الصيانة أو فيما بينها مثل تحديثات خدمة Event Hubs (أو) تحديثات نظام التشغيل على الموارد التي تقوم بتشغيل الخدمة. أثناء تحديثات نظام التشغيل، يتم نقل الكيانات ويتم تحديث العقد أو إعادة تشغيلها، ما قد يؤدي إلى انقضاء المهلات. للحصول على تفاصيل اتفاقية مستوى الخدمة (SLA) لخدمة مراكز الأحداث، راجع SLA لمراكز الأحداث .
أسباب شائعة
هناك سببان شائعان لهذا الخطأ: التكوين غير الصحيح أو خطأ خدمة عابر.
- تكوين غير صحيح قد تكون مهلة العملية صغيرة جداً بالنسبة لحالة التشغيل. القيمة الافتراضية لمهلة العملية في SDK للعميل هي 60 ثانية. تحقق لمعرفة ما إذا كان الرمز الخاص بك يحتوي على قيمة معينة لشيء صغير جداً. يمكن أن تؤثر حالة استخدام الشبكة ووحدة المعالجة المركزية على الوقت الذي تستغرقه عملية معينة حتى تكتمل، لذلك لا ينبغي تعيين مهلة العملية على قيمة صغيرة.
- خطأ عابر في الخدمة في بعض الأحيان، قد تواجه خدمة Event Hubs تأخيرات في معالجة الطلبات ؛ على سبيل المثال، خلال فترات الازدحام المروري. في مثل هذه الحالات، يمكنك إعادة محاولة إجراء العملية بعد تأخير، حتى تنجح العملية. في حالة استمرار فشل العملية نفسها بعد عدة محاولات، قم بزيارة موقع حالة خدمة Azure لمعرفة ما إذا كان هناك أي انقطاع معروف في الخدمة.
ServerBusyException
يشير Microsoft.ServiceBus.Messaging.ServerBusyException أو Microsoft.Azure.EventHubs.ServerBusyException إلى زيادة تحميل الخادم. هناك نوعان من رموز الخطأ ذات الصلة لهذا الاستثناء.
رمز الخطأ 50002
يمكن أن يحدث هذا الخطأ لسبب من سببين:
لا يتم توزيع الحمل بالتساوي عبر جميع الأقسام الموجودة على مركز الحدث، ويصل قسم واحد إلى حد وحدة الإنتاجية المحلية.
الحل: مراجعة إستراتيجية توزيع القسم أو تجربة EventHubClient.Send (eventDataWithOutPartitionKey) قد يساعد.
لا تحتوي مساحة اسم "مراكز الأحداث" على وحدات إنتاجية كافية (يمكنك التحقق من شاشة المقاييس في نافذة مساحة اسم "مراكز الأحداث" في مدخل Microsoft Azure للتأكيد). تعرض البوابة معلومات مجمعة (دقيقة واحدة)، لكننا نقيس الإنتاجية في الوقت الفعلي - لذا فهي مجرد تقدير.
الحل: يمكن أن تساعد زيادة وحدات الإنتاجية في مساحة الاسم.
يمكنك تكوين وحدات النقل في صفحة مقياس أو صفحة نظرة عامة لصفحة مساحة أسماء مراكز الأحداث في مدخل Azure. أو يمكنك استخدام تضخيم تلقائي ، والذي يتم توسيعه تلقائياً عن طريق زيادة عدد وحدات النقل لتلبية احتياجات الاستخدام.
يتم تطبيق وحدات الإنتاجية (TUs) على جميع مراكز الأحداث في مساحة اسم Event Hubs. وهذا يعني أن تشتري وحدات TUs على مستوى مساحة الاسم وتتم مشاركتها بين مراكز الحدث ضمن مساحة الاسم تلك. كل TU يمنح مساحة الاسم القدرات التالية:
- حتى 1 ميغابايت في الثانية من أحداث الدخول (الأحداث المرسلة إلى مركز حدث)، ولكن لا يزيد عن 1000 حدث دخول، وعمليات الإدارة، أو التحكم في مكالمات API في الثانية.
- ما يصل إلى 2 ميغابايت في الثانية من أحداث الخروج (الأحداث المستهلكة من مركز الحدث)، ولكن لا يزيد عن 4096 حدث خروج.
- ما يصل إلى 84 غيغابايت من تخزين الأحداث (بما يكفي لفترة الاستبقاء الافتراضية البالغة ساعة واحدة).
في صفحة نظرة عامة ، في قسم إظهار المقاييس ، بدّل إلى علامة التبويب الإنتاجية . حدد المخطط لفتحه في نافذة أكبر بفواصل زمنية مدتها دقيقة واحدة على المحور س. انظر إلى قيم الذروة وقسمها على 60 للحصول على بايت وارد/ثانية أو بايت صادر/ثانية. استخدم أسلوباً مشابهاً لحساب عدد الطلبات في الثانية في أوقات الذروة في علامة التبويب الطلبات .
إذا رأيت قيماً أعلى من عدد وحدات التحديث القصوى * (1 ميغابايت في الثانية للدخول أو 1000 طلب للدخول / ثانية، 2 ميغابايت في الثانية للخروج)، فقم بزيادة عدد وحدات التحديث باستخدام المقياس ( في القائمة اليمنى) من مساحة اسم "مراكز الأحداث" لتوسيع نطاقها يدوياً أو استخدام ميزة تضخيم تلقائي لمراكز الأحداث. يمكنك توسيع نطاق حتى 40 وحدة TUs عند تغيير حجم مساحة الاسم يدويا أو تحجيمها تلقائيا.
رمز الخطأ 50008
نادراً ما يحدث هذا الخطأ. يحدث ذلك عندما يكون رمز تشغيل الحاوية لمساحة الاسم لديك منخفضاً في وحدة المعالجة المركزية (CPU) - ليس أكثر من بضع ثوانٍ قبل أن يبدأ موازن تحميل Event Hubs.
الحل: قصر المكالمات على أسلوب GetRuntimeInformation. تدعم مراكز الأحداث ما يصل إلى 50 مكالمة في الثانية لكل مجموعة مستهلكين إلى GetRuntimeInfo في الثانية. قد تتلقى استثناءً مشابهاً للاستثناء التالي بمجرد الوصول إلى الحد الأقصى:
ExceptionId: 00000000000-00000-0000-a48a-9c908fbe84f6-ServerBusyException: The request was terminated because the namespace 75248:aaa-default-eventhub-ns-prodb2b is being throttled. Error code : 50008. Please wait 10 seconds and try again.
الخطوات التالية
يمكنك معرفة المزيد عن مراكز الأحداث من خلال زيارة الروابط التالية: