عیب یابی خطای زمان اجرا سهمیه

شما در حال مشاهده اسناد 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> در خط مشی Quota را شناسایی کنید. شما می توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در خطای زیر، مقدار نامعتبر استفاده شده برای عنصر <MessageWeight> 1.5 است:

    "faultstring": "Invalid message weight value 1.5"
    
  2. تمام خط مشی های سهمیه را در پروکسی API خاص که در آن شکست رخ داده است، بررسی کنید. ممکن است یک یا چند خط مشی سهمیه وجود داشته باشد که در آن عنصر <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. کد را در بسته API Proxy که در آن ابتدا متغیر تعریف شده است، قرار دهید.
    2. هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، سپس بررسی کنید که مقدار متغیر چگونه تنظیم شده است.
    3. اگر مقدار متغیر جریان با مقدار مشخص شده در مرحله شماره 1 در بالا مطابقت داشته باشد، این دلیل خطا است.

    به عنوان مثال، فرض کنید که یک خط مشی جاوا اسکریپت که قبل از Quota Policy استفاده می شود، متغیر 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 در جاوا اسکریپت را به صورت یک عدد صحیح تغییر دهید.

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> در خط مشی Quota تعریف نشده باشد، این خطا رخ می دهد. این عنصر اجباری است و برای تعیین فاصله زمانی قابل اعمال برای سهمیه استفاده می شود. فاصله زمانی می تواند دقیقه، ساعت، روز، هفته یا ماه باشد که با عنصر <TimeUnit> تعریف شده است.

تشخیص

  1. هر یک از خط‌مشی‌های Quota را در پراکسی API که در آن شکست رخ داده است، بررسی کنید. اگر هر خط مشی Quota وجود داشته باشد که عنصر اجباری <Interval> تعریف نشده باشد، دلیل این خطا همین است.

    برای مثال، خط مشی Quota زیر عنصر اجباری <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> در خط مشی Quota بالا تعریف نشده است، کد خطا را دریافت خواهید کرد:

    policies.ratelimit.FailedToResolveQuotaIntervalReference
    

قطعنامه

اطمینان حاصل کنید که تمام خط مشی های Quota برای یک پراکسی API معین دارای عنصر اجباری <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> در خط مشی Quota تعریف نشده باشد، این خطا رخ می دهد. این عنصر اجباری است و برای تعیین واحد زمان قابل اعمال در سهمیه استفاده می شود. فاصله زمانی می تواند بر حسب دقیقه، ساعت، روز، هفته یا ماه باشد.

تشخیص

  1. هر یک از خط‌مشی‌های Quota را در پراکسی API که در آن شکست رخ داده است، بررسی کنید. اگر هر خط مشی Quota وجود داشته باشد که عنصر اجباری <TimeUnit> تعریف نشده باشد، این دلیل خطا است.

    برای مثال، خط مشی Quota زیر عنصر اجباری <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> در خط مشی Quota بالا تعریف نشده است، کد خطا را دریافت خواهید کرد:

    policies.ratelimit.FailedToResolveQuotaIntervalTimeUnitReference
    

قطعنامه

اطمینان حاصل کنید که تمام خط مشی های سهمیه برای یک پروکسی API معین دارای عنصر اجباری <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>