تحديد وحلّ المشاكل المتعلقة بخطأ وقت تشغيل الحصة

أنت تعرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

InvalidMessageWeight

رمز الخطأ

policies.ratelimit.InvalidMessageWeight

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "Invalid message weight value [invalid_value]",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

مثال على رسالة خطأ

{
    "fault": {
        "faultstring": "Invalid message weight value 1.5",
        "detail": {
            "errorcode": "policies.ratelimit.InvalidMessageWeight"
        }
    }
}

السبب

يحدث هذا الخطأ إذا كانت قيمة العنصر <MessageWeight> المحددة من خلال متغير التدفق غير صالحة (قيمة ليست عددًا صحيحًا).

على سبيل المثال، سيحدث هذا الخطأ إذا كانت قيمة متغيّر التدفق المحدّدة للعنصر <MessageWeight> هي 1.5 (قيمة غير صحيحة).

التشخيص

  1. حدِّد القيمة غير الصالحة المستخدَمة للعنصر <MessageWeight> في سياسة الحصة. يمكنك العثور على هذه المعلومات في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في الخطأ التالي، القيمة غير الصالحة المستخدَمة للعنصر <MessageWeight> هي 1.5:

    "faultstring": "Invalid message weight value 1.5"
    
  2. راجِع جميع سياسات الحصة في وكيل واجهة برمجة التطبيقات المحدّد الذي حدث فيه الخطأ. يمكن أن تكون هناك سياسة حصة واحدة أو أكثر يتم فيها تحديد العنصر <MessageWeight>.

    على سبيل المثال، تحدّد السياسة التالية <MessageWeight>من خلال متغيّر مسار:message_weight

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="Quota_with_weight" type="calendar">
        <DisplayName>Quota_with_weight</DisplayName>
        <Properties/>
        <Allow count="3"/>
        <Interval>1</Interval>
        <TimeUnit>minute</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
        <MessageWeight ref="message_weight"/>
    </Quota>
    
  3. حدِّد قيمة المتغيّر المستخدَم لـ <MessageWeight> في سياسات الحصص المحدَّدة. يمكن استخراج قيمة متغيّر مسار الإحالة الناجحة من رؤوس HTTP أو مَعلمات طلب البحث أو الحمولة في طلب XML أو JSON أو تحديدها في سياسة أخرى:

    1. حدِّد مكان الرمز ضمن حِزمة "الوكيل لواجهة برمجة التطبيقات" التي تم فيها تعريف المتغيّر أولاً.
    2. بمجرد معرفة السياسة التي يتم فيها تعريف المتغير وتعبئته أولاً، ثم تحقق من كيفية تعيين قيمة المتغير.
    3. إذا كانت قيمة متغيّر مسار الإحالة الناجحة تتطابق مع القيمة المحدّدة في الخطوة 1 أعلاه، هذا يعني أنّها سبب الخطأ.

    على سبيل المثال، لنفترض أنّ سياسة JavaScript المستخدَمة قبل "سياسة الحصة" تضبط المتغيّر message_weight استنادًا إلى نوع الطلب كما هو موضّح أدناه:

    var verb = context.getVariable("request.verb");
    context.setVariable("message_weight", "1.5");
    if (verb == 'POST') {
      context.setVariable("message_weight", "2");
    }
    

    لاحظ أن قيمة المتغير message_weight هي 1.5 وهي قيمة غير صالحة (ليست عددًا صحيحًا).

الدقة

تأكَّد من أنّ القيمة التي تمثّل MessageWeight المحدّدة بواسطة متغيّر مسار الإحالة الناجحة هي قيمة صالحة (قيمة عددية).

لتصحيح المثال أعلاه، يمكنك تعديل قيمة المتغيّر message_weight في JavaScript لتكون عددًا صحيحًا.

var verb = context.getVariable("request.verb");
context.setVariable("message_weight", "1");
if (verb == 'POST') {
  context.setVariable("message_weight", "2");
}

FailedToResolveQuotaIntervalReference

رمز الخطأ

policies.ratelimit.FailedToResolveQuotaIntervalReference

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

مثال على رسالة خطأ

{
    "fault": {
        "faultstring": "Failed to resolve quota interval reference api.product.developer.quota.interval in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalReference"
        }
    }
}

السبب

يحدث هذا الخطأ إذا لم يتم تعريف العنصر <Interval> ضمن سياسة الحصة. هذا العنصر إلزامي ويُستخدم لتحديد الفاصل الزمني الساري على الحصة. يمكن أن يكون الفاصل الزمني دقائق أو ساعات أو أيامًا أو أسابيع أو شهورًا كما هو محدّد باستخدام العنصر <TimeUnit>.

التشخيص

  1. راجِع كلّ سياسة من سياسات الحصة في "وكيل واجهة برمجة التطبيقات" الذي حدث فيه العُطل. إذا كانت هناك أي سياسة حصة لم يتم فيها تحديد العنصر الإلزامي <Interval>، هذا هو سبب الخطأ.

    على سبيل المثال، لا تحتوي سياسة الحصة التالية على العنصر الإلزامي <Interval>:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
        <DisplayName>CheckQuota</DisplayName>
        <Properties/>
        <Allow count="3"/>
            <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
        <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    بما أنّ العنصر الإلزامي <TimeUnit> غير محدّد في سياسة الحصة أعلاه، سيظهر لك رمز الخطأ التالي:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

الدقة

تأكَّد من أنّ جميع سياسات الحصة لخادم وكيل واجهة برمجة تطبيقات معيّن تتضمّن العنصر الإلزامي <Interval> بشكل صحيح.

لتصحيح المثال الموضح أعلاه، يمكنك تعديل السياسة لتضمين العنصر <Interval> كما هو موضح أدناه.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>

FailedToResolveQuotaIntervalTimeUnitReference

رمز الخطأ

policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference

نص الاستجابة للخطأ

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference [reference] in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

مثال على رسالة خطأ

{
    "fault": {
        "faultstring": "Failed to resolve quota time unit reference apiproduct.developer.quota.timeunity in quota policy {1}",
        "detail": {
            "errorcode": "policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference"
        }
    }
}

السبب

يحدث هذا الخطأ إذا لم يتم تعريف العنصر <TimeUnit> ضمن سياسة الحصة. هذا العنصر إلزامي ويُستخدم لتحديد الوحدة الزمنية السارية على الحصة. يمكن أن يكون الفاصل الزمني بالدقائق أو الساعات أو الأيام أو الأسابيع أو الأشهر.

التشخيص

  1. راجِع كلّ سياسة من سياسات الحصة في "وكيل واجهة برمجة التطبيقات" الذي حدث فيه العُطل. إذا كانت هناك أي سياسة حصة لم يتم فيها تحديد العنصر الإلزامي <TimeUnit>، هذا هو سبب الخطأ.

    على سبيل المثال، لا تتضمّن سياسة الحصة التالية العنصر الإلزامي <TimeUnit>:

    <Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
      <DisplayName>CheckQuota</DisplayName>
      <Properties/>
      <Allow count="3"/>
          <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
      <StartTime>2017-7-16 12:00:00</StartTime>
    </Quota>
    

    بما أنّ العنصر الإلزامي <TimeUnit> غير محدّد في سياسة الحصة أعلاه، سيظهر لك رمز الخطأ التالي:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

الدقة

تأكَّد من أنّ جميع سياسات الحصص لخادم وكيل واجهة برمجة تطبيقات معيّن تتضمّن العنصر الإلزامي <TimeUnit>.

لتصحيح المثال الموضح أعلاه، يمكنك تعديل السياسة لتضمين العنصر <TimeUnit> كما هو موضح أدناه.

<Quota async="false" continueOnError="false" enabled="true" name="CheckQuota" type="calendar">
    <DisplayName>CheckQuota</DisplayName>
    <Properties/>
    <Allow count="3"/>
    <TimeUnit ref="verifyapikey.verify-api-key.apiproduct.developer.quota.timeunit">hour</TimeUnit>
    <Interval ref="verifyapikey.verify-api-key.apiproduct.developer.quota.interval">1</Interval>
    <StartTime>2017-7-16 12:00:00</StartTime>
</Quota>