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

أنت الآن بصدد الاطّلاع على مستندات 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>