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

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

RequestVariableNotMessageType

رمز الخطأ

steps.servicecallout.RequestVariableNotMessageType

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

{
    "fault": {
        "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message",
        "detail": {
            "errorcode": "steps.servicecallout.RequestVariableNotMessageType"
        }
    }
}

السبب

يحدث هذا الخطأ إذا لم يكن المتغيّر المحدّد في العنصر <Request> ضمن سياسة وسائل شرح الخدمة من نوع message. إذا كان المتغيّر عبارة عن سلسلة أو أي نوع آخر ليس رسائل، سيظهر لك هذا الخطأ.

تمثل متغيرات نوع الرسالة طلبات واستجابات HTTP كاملة. إنّ متغيرات تدفق Edge المضمنة request وresponse وmessage هي من نوع الرسالة. لمعرفة المزيد من المعلومات عن متغيّرات الرسائل، اطّلِع على مرجع المتغيّرات.

التشخيص

  1. حدد سياسة وسيلة شرح الخدمة التي حدث فيها الخطأ واسم المتغير الذي يكون نوعه غير صحيح. يمكنك العثور على كلا العنصرَين في العنصر faultstring ضمن استجابة الخطأ. على سبيل المثال، في faultstring التالية، يكون اسم السياسة هو ExecuteGeocodingRequest والمتغير PostalCode:

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"

  2. في ملف XML الذي تعذّر تطبيق سياسة وسيلة شرح الخدمة عليه، تأكَّد من أنّ اسم المتغيّر الذي تم تحديده في العنصر <Request> يتطابق مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة 1 أعلاه). على سبيل المثال، تحدِّد السياسة التالية متغيّر طلب يُسمى PostalCode، والذي يطابق ما هو متوفّر في faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ServiceCallout name="ExecuteGeocodingRequest">
        <Request variable="PostalCode"/>
        <Response>GeocodingResponse</Response>
        <HTTPTargetConnection>
            <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
        </HTTPTargetConnection>
    </ServiceCallout>
    
  3. حدِّد ما إذا كان هذا المتغيّر من نوع الرسالة أم لا:

    1. حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
    2. وفي معظم الحالات، ستجد أن متغير المشكلة قد تم إنشاؤه وتعبئته في سياسة أخرى يتم تنفيذها قبل سياسة وسيلة شرح الخدمة. على سبيل المثال، يشيع استخدام سياسة "تعيين الرسالة" لإنشاء المتغيرات وملئها في تدفق الخادم الوكيل لواجهة برمجة التطبيقات.
    3. بعد تحديد السياسة التي يتم تحديد المتغيّر فيها وتعبئتها أولاً، عليك تحديد نوع ذلك المتغيّر على النحو التالي:
      • تحقَّق من قيمة السمة type (عند توفّرها).
      • في حال عدم توفّر السمة type، يُعتبر المتغيّر سلسلة.
    4. إذا كان نوع المتغيّر لا يمثّل رسالة (مثل سلسلة)، يكون هذا هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

على سبيل المثال، لنفترض أنّ المتغيّر PostalCode المُشار إليه في سياسة "وسائل شرح الخدمة" قد تم إنشاؤه في سياسة "تعيين الرسالة" التالية. تجدر الإشارة إلى أنّه تمّ تحديد PostalCode لقيمة متغير التدفق request.queryparam.postalcode. هذه القيمة هي سلسلة لأنّه لا تتوفّر سمة type في تعيين المتغيّر.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
        <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
    <Set>
        <QueryParams>
            <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
            <QueryParam name="region">{request.queryparam.country}</QueryParam>
            <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
        <Verb>GET</Verb>
    </Set>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Ref>request.queryparam.postalcode</Ref>
    </AssignVariable>
    <AssignVariable>
        <Name>Country</Name>
        <Ref>request.queryparam.country</Ref>
    </AssignVariable>
</AssignMessage>

تذكّر الآن أنّ المتغيّر PostalCode يُستخدم في العنصر <Request> ضمن سياسة وسائل شرح الخدمة:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="PostalCode"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

نظرًا لأن PostalCode ليس من نوع الرسالة (إنه سلسلة في هذا المثال)، ستتلقى رمز الخطأ: steps.servicecallout.RequestVariableNotMessageType.

درجة الدقّة

يُرجى التأكُّد من أن المتغيّر الذي تم ضبطه في العنصر <Request> ضمن سياسة "وسيلة شرح الخدمة" التي تعذّر نقلها هو متغيّر مسار من نوع رسالة، أو يمكنك بدلاً من ذلك إنشاء متغيّر جديد لنوع الرسالة مباشرةً في سياسة "وسيلة شرح الخدمة" (كما هو موضّح في مستندات السياسة) واستخدامه.

لتصحيح السياسة، عليك تعديل العنصر <Request> لتحديد متغيّر حالي أو جديد من نوع الرسالة. على سبيل المثال، المتغير GeocodingRequest الذي تم ضبطه في سياسة "تعيين الرسالة" هو من نوع الرسالة، ويعمل بشكل جيد في سياسة وسيلة شرح الخدمة. مثال:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

RequestVariableNotRequestMessageType

رمز الخطأ

steps.servicecallout.RequestVariableNotRequestMessageType

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

{
    "fault": {
        "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message",
        "detail": {
            "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType"
        }
    }
}

السبب

يحدث هذا الخطأ إذا لم يكن المتغيّر المحدّد في العنصر <Request> ضمن سياسة وسائل شرح الخدمة من نوع رسالة الطلب. إذا كان المتغير هو نوع رسالة استجابة أو سلسلة أو أي نوع آخر، سيظهر لك هذا الخطأ.

تمثّل متغيّرات نوع الرسالة طلبات HTTP الكاملة واستجاباتها. إنّ متغيرات تدفق Edge المضمنة request وresponse وmessage هي من نوع الرسالة. لمعرفة المزيد من المعلومات عن متغيّرات الرسائل، اطّلِع على مرجع المتغيّرات.

التشخيص

  1. حدد سياسة وسيلة شرح الخدمة التي حدث فيها الخطأ واسم المتغير الذي يكون نوعه غير صحيح. يمكنك العثور على كلا العنصرَين في العنصر faultstring ضمن استجابة الخطأ. على سبيل المثال، في faultstring التالية، يكون اسم السياسة هو ExecuteGeocodingRequest والمتغير var_response:

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"

  2. في ملف XML الذي تعذّر تطبيق سياسة وسيلة شرح الخدمة عليه، تأكَّد من أنّ اسم المتغيّر الذي تم تحديده في العنصر <Request> يتطابق مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة 1 أعلاه). على سبيل المثال، تحدِّد السياسة التالية متغيّر طلب يُسمى var_response، والذي يطابق ما هو متوفّر في faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ServiceCallout name="ExecuteGeocodingRequest">
        <Request variable="var_response"/>
        <Response>GeocodingResponse</Response>
        <HTTPTargetConnection>
            <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
        </HTTPTargetConnection>
    </ServiceCallout>
    
  3. حدِّد ما إذا كان المتغيّر من نوع رسالة الطلب أم لا:

    1. حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
    2. وفي معظم الحالات، ستجد أن متغير المشكلة قد تم إنشاؤه وتعبئته في سياسة أخرى يتم تنفيذها قبل سياسة وسيلة شرح الخدمة. على سبيل المثال، يشيع استخدام سياسة "تعيين الرسالة" لإنشاء المتغيرات وملئها في تدفق الخادم الوكيل لواجهة برمجة التطبيقات.
    3. بعد تحديد السياسة التي يتم تحديد المتغيّر فيها وتعبئتها أولاً، عليك تحديد نوع ذلك المتغيّر على النحو التالي:
      • تحقَّق من قيمة السمة type (عند توفّرها).
      • في حال عدم توفّر السمة type، يُعتبر المتغيّر سلسلة.
    4. إذا لم يكن نوع المتغيّر من النوع رسالة طلب، يكون سبب الخطأ هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

على سبيل المثال، لنفترض أنّ المتغيّر var_response المُشار إليه في سياسة "وسائل شرح الخدمة" قد تم إنشاؤه في سياسة "تعيين الرسالة" التالية. تجدر الإشارة إلى أنّ السمة var_response يتم منحها النوع response. وبالتالي، يكون نوع المتغيّر var_response هو رسالة الاستجابة.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
        <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
    <AssignTo createNew="true" type="response">var_response</AssignTo>
    <Set>
        <QueryParams>
            <QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
            <QueryParam name="region">{request.queryparam.country}</QueryParam>
            <QueryParam name="sensor">false</QueryParam>
        </QueryParams>
        <Verb>GET</Verb>
    </Set>
    <AssignVariable>
        <Name>PostalCode</Name>
        <Ref>request.queryparam.postalcode</Ref>
    </AssignVariable>
    <AssignVariable>
        <Name>Country</Name>
        <Ref>request.queryparam.country</Ref>
    </AssignVariable>
</AssignMessage>

تذكَّر أنّ المتغيّر var_response يُستخدم في العنصر <Request> ضمن سياسة وسائل شرح الخدمة.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="var_response"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

نظرًا لأن var_response ليس من نوع رسالة الطلب (نوعه هو رسالة استجابة)، ستتلقى رمز الخطأ: steps.servicecallout.RequestVariableNotRequestMessageType.

درجة الدقّة

تأكَّد من أنّ المتغيّر الذي تم ضبطه في العنصر <Request> ضمن سياسة وسيلة شرح الخدمة التي تعذّرت معالجتها هو متغيّر النوع طلب رسالة، أو يمكنك بدلاً من ذلك إنشاء متغيّر جديد لنوع رسالة طلب في سياسة وسيلة شرح الخدمة (كما هو موضّح في مستندات السياسة) واستخدامه.

لتصحيح السياسة، عليك تعديل العنصر <Request> لتحديد متغيّر حالي أو جديد من نوع رسالة الطلب، وسيتم ضبطه في سياسة "وسيلة شرح الخدمة". مثال:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

ExecutionFailed

رمز الخطأ

steps.servicecallout.ExecutionFailed

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

{
    "fault": {
        "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable",
        "detail": {
            "errorcode": "steps.servicecallout.ExecutionFailed"
        }
    }
}

أو

{
    "fault": {
        "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error",
        "detail": {
            "errorcode": "steps.servicecallout.ExecutionFailed"
        }
    }
}

الأسباب المحتملة

الأسباب المحتملة لهذا الخطأ هي:

السبب الوصف
عنوان URL غير صالح أو مكتوب بشكل غير صحيح عنوان URL المستهدف في سياسة وسيلة شرح الخدمة مكتوب بشكلٍ غير صحيح أو يتضمّن اسم مضيف غير صالح أو لا يمكن الوصول إليه.
خطأ في خادم الخلفية يعرض خادم الخلفية استجابة خطأ 4XX أو 5XX.

السبب: عنوان URL غير صالح أو مكتوب بشكلٍ غير صحيح

عنوان URL المستهدف في سياسة وسيلة شرح الخدمة مكتوب بشكلٍ غير صحيح أو يتضمّن اسم مضيف غير صالح أو لا يمكن الوصول إليه.

التشخيص

  1. حدِّد سياسة وسيلة شرح الخدمة التي تسببت في حدوث الخطأ. يظهر اسم السياسة في العنصر faultstring الخاص بالاستجابة للخطأ. على سبيل المثال، في faultstring التالية، اسم سياسة وسيلة شرح الخدمة التي تعذّر تنفيذها هو ExecuteGeocodingRequest.

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]"

  2. في سياسة وسيلة شرح الخدمة التي تعذّرت معالجتها، افحص العنصر <URL>. وإذا كان مكتوبًا بشكلٍ غير صحيح أو كان اسم المضيف غير صالح أو لا يمكن الوصول إليه، يكون السبب في هذا الخطأ. على سبيل المثال، تحدِّد سياسة وسائل شرح الخدمة التالية سمة <URL> غير صالحة:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ServiceCallout name="ExecuteGeocodingRequest">
        <Request variable="GeocodingRequest"/>
        <Response>GeocodingResponse</Response>
        <HTTPTargetConnection>
            <URL>http://</URL>
        </HTTPTargetConnection>
    </ServiceCallout>
    

    لا يحتوي العنصر <URL> إلا على البروتوكول http://، ولكن ليس له اسم مضيف صالح، لذلك، تعذَّر تنفيذ سياسة وسيلة شرح الخدمة وتظهر رسالة الخطأ التالية: Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable.

درجة الدقّة

تأكَّد من أنّ العنصر <URL> في سياسة وسائل شرح الخدمة التي تعذّر تنفيذها له عنوان URL صالح واسم مضيف يمكن الوصول إليه.

لتصحيح سياسة وسيلة شرح الخدمة الموضحة أعلاه، يمكنك تعديل العنصر <URL> لتحديد عنوان URL صالح:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
    <Request variable="GeocodingRequest"/>
    <Response>GeocodingResponse</Response>
    <HTTPTargetConnection>
        <URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
    </HTTPTargetConnection>
</ServiceCallout>

السبب: خطأ في خادم الخلفية

يعرض خادم الخلفية استجابة خطأ 4XX أو 5XX.

التشخيص

  1. حدِّد سياسة وسيلة شرح الخدمة التي تسببت في حدوث الخطأ. يظهر اسم السياسة في العنصر faultstring الخاص بالاستجابة للخطأ. على سبيل المثال، في faultstring التالية، اسم سياسة وسيلة شرح الخدمة التي تعذّر تنفيذها هو ExecuteGeocodingRequest.

    "faultstring": "ServiceCallout[ExecuteGeocodingRequest]

  2. افحص faultstring في نص استجابة الخطأ وتحقَّق مما إذا كانت هناك أي رموز استجابة 4XX أو 5XX مدرجة في Reason. على سبيل المثال، تشير سلسلة الخطأ التالية بوضوح إلى عرض رمز الاستجابة 502 من الخادم الخلفية:

    "faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"

درجة الدقّة

بعد تحديد رمز استجابة الخطأ، يمكنك تحديد وحلّ هذه المشكلة تمامًا كما تفعل مع أي خطأ 4XX أو 5XX. يُرجى الرجوع إلى الأدلة الإرشادية لأخطاء وقت التشغيل (4XX/5XX) للحصول على تعليمات حول تحديد المشاكل وحلّها بشأن أخطاء 4XX أو 5XX.