يتم الآن عرض مستندات 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
هي من نوع الرسالة. لمعرفة المزيد من المعلومات عن متغيّرات الرسائل، اطّلِع على مرجع المتغيّرات.
التشخيص
حدد سياسة وسيلة شرح الخدمة التي حدث فيها الخطأ واسم المتغير الذي يكون نوعه غير صحيح. يمكنك العثور على كلا العنصرَين في العنصر
faultstring
ضمن استجابة الخطأ. على سبيل المثال، فيfaultstring
التالية، يكون اسم السياسة هوExecuteGeocodingRequest
والمتغيرPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
في ملف 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>
حدِّد ما إذا كان هذا المتغيّر من نوع الرسالة أم لا:
- حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
- وفي معظم الحالات، ستجد أن متغير المشكلة قد تم إنشاؤه وتعبئته في سياسة أخرى يتم تنفيذها قبل سياسة وسيلة شرح الخدمة. على سبيل المثال، يشيع استخدام سياسة "تعيين الرسالة" لإنشاء المتغيرات وملئها في تدفق الخادم الوكيل لواجهة برمجة التطبيقات.
- بعد تحديد السياسة التي يتم تحديد المتغيّر فيها وتعبئتها أولاً، عليك تحديد نوع ذلك المتغيّر على النحو التالي:
- تحقَّق من قيمة السمة
type
(عند توفّرها). - في حال عدم توفّر السمة
type
، يُعتبر المتغيّر سلسلة.
- تحقَّق من قيمة السمة
- إذا كان نوع المتغيّر لا يمثّل رسالة (مثل سلسلة)، يكون هذا هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.
على سبيل المثال، لنفترض أنّ المتغيّر 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
هي من نوع الرسالة. لمعرفة المزيد من المعلومات عن متغيّرات الرسائل، اطّلِع على مرجع المتغيّرات.
التشخيص
حدد سياسة وسيلة شرح الخدمة التي حدث فيها الخطأ واسم المتغير الذي يكون نوعه غير صحيح. يمكنك العثور على كلا العنصرَين في العنصر
faultstring
ضمن استجابة الخطأ. على سبيل المثال، فيfaultstring
التالية، يكون اسم السياسة هوExecuteGeocodingRequest
والمتغيرvar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
في ملف 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>
حدِّد ما إذا كان المتغيّر من نوع رسالة الطلب أم لا:
- حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
- وفي معظم الحالات، ستجد أن متغير المشكلة قد تم إنشاؤه وتعبئته في سياسة أخرى يتم تنفيذها قبل سياسة وسيلة شرح الخدمة. على سبيل المثال، يشيع استخدام سياسة "تعيين الرسالة" لإنشاء المتغيرات وملئها في تدفق الخادم الوكيل لواجهة برمجة التطبيقات.
- بعد تحديد السياسة التي يتم تحديد المتغيّر فيها وتعبئتها أولاً، عليك تحديد نوع ذلك المتغيّر على النحو التالي:
- تحقَّق من قيمة السمة
type
(عند توفّرها). - في حال عدم توفّر السمة
type
، يُعتبر المتغيّر سلسلة.
- تحقَّق من قيمة السمة
- إذا لم يكن نوع المتغيّر من النوع رسالة طلب، يكون سبب الخطأ هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.
على سبيل المثال، لنفترض أنّ المتغيّر 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 المستهدف في سياسة وسيلة شرح الخدمة مكتوب بشكلٍ غير صحيح أو يتضمّن اسم مضيف غير صالح أو لا يمكن الوصول إليه.
التشخيص
حدِّد سياسة وسيلة شرح الخدمة التي تسببت في حدوث الخطأ. يظهر اسم السياسة في العنصر
faultstring
الخاص بالاستجابة للخطأ. على سبيل المثال، فيfaultstring
التالية، اسم سياسة وسيلة شرح الخدمة التي تعذّر تنفيذها هوExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
في سياسة وسيلة شرح الخدمة التي تعذّرت معالجتها، افحص العنصر
<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.
التشخيص
حدِّد سياسة وسيلة شرح الخدمة التي تسببت في حدوث الخطأ. يظهر اسم السياسة في العنصر
faultstring
الخاص بالاستجابة للخطأ. على سبيل المثال، فيfaultstring
التالية، اسم سياسة وسيلة شرح الخدمة التي تعذّر تنفيذها هوExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
افحص
faultstring
في نص استجابة الخطأ وتحقَّق مما إذا كانت هناك أي رموز استجابة 4XX أو 5XX مدرجة فيReason
. على سبيل المثال، تشير سلسلة الخطأ التالية بوضوح إلى عرض رمز الاستجابة 502 من الخادم الخلفية:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
درجة الدقّة
بعد تحديد رمز استجابة الخطأ، يمكنك تحديد وحلّ هذه المشكلة تمامًا كما تفعل مع أي خطأ 4XX أو 5XX. يُرجى الرجوع إلى الأدلة الإرشادية لأخطاء وقت التشغيل (4XX/5XX) للحصول على تعليمات حول تحديد المشاكل وحلّها بشأن أخطاء 4XX أو 5XX.