Coldfusion REST API عودة "فشل الاتصال. رمز الحالة غير متوفر. ' عندما تسمى عن بعد

StackOverflow https://stackoverflow.com/questions/3902654

سؤال

الآن أريد أن أبدأ هذا الأمر مع أنا غير متأكد مما إذا كان هذا يجب أن يكون هنا أو على خطأ الخادم ، لذا سأقوم بنشره هنا لتبدأ.

نقوم بتطوير واجهة برمجة تطبيقات REST في Coldfusion 9 والتي يتم استضافتها على IIS 7 لعميل يجب على بعض المكالمات استدعاء خدمة الويب الداخلية الأخرى. عند إجراء هذه المكالمات من الخادم ، يتم استضافة واجهة برمجة التطبيقات (API) على عدم وجود أخطاء ، ولكن عندما نجري المكالمة من جهاز بعيد ، يتم إرجاع الرسالة التالية:

'فشل الاتصال. رمز الحالة غير متوفر. '

لقد غوغل القضية التي تم اقتراح ما يلي كإصلاح http://www.talkingtree.com/blog/index.cfm/2004/7/28/20040729 لكنه لا يعمل بالنسبة لي. فيما يلي ملاحظات من الاختبار الخاص بي:

  • المكالمات التي تسبب القضية هي مزيج من Get و Put و Post و Delete.
  • الجزء الشائع الوحيد من كل مكالمة هو التحدث إلى نفس خدمة الويب.
  • أتمكن من الاتصال بخدمات الويب مباشرة من الأماكن التي أقوم فيها بإجراء المكالمات عن بُعد إلى واجهة برمجة التطبيقات.
  • على الرغم من أن جميع المكالمات تقوم بإجراء مكالمة إلى نفس خدمة الويب ، فإنها لا تقوم جميعًا بإجراء نفس المكالمة إلى خدمة الويب.
هل كانت مفيدة؟

المحلول 2

تبين أن المشكلة هي أن كل من المكالمات تتطلب مصادقة أساسية كانت المكالمات نفسها تتعامل معها ، ولكن تم تشغيل المصادقة الأساسية في IIS التي تسبب IIS لاعتراض أي طلبات برأس تفويض.

هذا يسبب مشكلة لأن IIS يفترض أنه إذا تم تمرير المصادقة ، فسيتم ذلك للمستخدم على هذا الجهاز/المجال وسوف يرفض أي بيانات اعتماد أخرى (والتي كانت صالحة للنظام). كان يعمل عندما تم تسجيلنا إلى الجهاز لأنه قادم محليًا لم يكن بحاجة إلى مصادقة المستخدم.

نصائح أخرى

الأفكار:

اتصل بخدمة الويب عن بُعد باستخدام عنوان URL الذي يحل إلى خادم ColdFusion الداخلي (على سبيل المثال http: // [serverName]: 8300). من المحتمل أن تضطر إلى بعض التكوين للحصول على هذا العمل. السبب في القيام بذلك هو تحديد ما إذا كان IIS أو Coldfusion هو السبب الجذري. إذا تمكنت من الوصول إلى الخادم الداخلي عن بُعد ، فمن المحتمل أن يكون IIs هو المشكلة.

هل مكالمة خدمة الويب عبر SSL؟ إذا كان الأمر كذلك ، هل المتصل البعيد أيضًا Coldfusion؟ إذا كنت قد أجبت على حد سواء نعم ، تحقق لمعرفة ما إذا كانت شهادة SSL موثوقة من قبل JVM المتصل عن بُعد. إذا لم يكن الأمر كذلك ، فأنت بحاجة إلى تسجيله كجزء من keystore من JVM.

هل يمكنك ping خادم المضيف من المتصل؟ إذا لم يكن كذلك ، هل يحتاج المتصل إلى إدخال "المضيفين"؟

إذا تم تمكينه على مضيفك ، راجع مرشح .NET وكيف يتفاعل مع مكالمات HTTP. لقد واجهت موقفًا لم أتمكن فيه من الوصول إلى مجلد يسمى "/bin" لأن مرشح .NET اعترض الطلبات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top