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

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

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>