البرمجة

حل مشكلة الخطأ 405 Method Not Allowed في خدمات WCF عبر IIS

مقدمة:

مرحبًا، أحاول إعداد خدمة ويب WCF على خادم IIS 7.5 المحلي، ولكن بعد إكمال التكوينات الأساسية، لا يمكنني إرسال البيانات باستخدام عميل اختبار WinForms، ويعيد خطأ ذكر في العنوان. لقد بحثت بالفعل في مواضيع مماثلة حول هذه المشكلة، ولكنني لم أجد أي شيء يتناسب مع مشكلتي.

البيانات:

– كل من خدمة WCF وعميل الاختبار تم توفيرهما من طرف ثالث

– تعمل بالفعل على خادم آخر، وأنا استخدم نفس الإصدارات

– ربما أقوم بفعل شيء خاطئ عند تمكين أو تكوين IIS

الطلب:

– أحتاج إلى معرفة الميزات التي يجب تمكينها/تعطيلها في IIS لتثبيتها بشكل صحيح حتى أتمكن من استخدام خدمة WCF (إذا كانت هذه هي الحالة).

– كيفية تكوين الخادم بشكل صحيح لحل الخطأ المذكور أعلاه.

تكويناتي:

– بعد تثبيت IIS، قمت بتغيير DefaulAppPool إلى .NET Framework v4.0.30.319؛ وضع الأنابيب: متكامل. – إعدادات متقدمة: تحميل ملف الملف الشخصي = خطأ.

– أنشأت موقع ويب جديدًا باسم “WcfMicrocontrollerService” باستخدام DefaultAppPool.Binding؛ النوع: http، عنوان IP:، المنفذ: 80

في هذه المرحلة، يمكنني الوصول إليها من خلال متصفح الويب، ولكن عند استخدام عميل الاختبار لنقل البيانات إلى الخدمة، أحصل على الخطأ التالي: “الخادم البعيد قد قدم استجابة غير متوقعة: (405) الطريقة غير مسموح بها”.

هذه هي حزم البيانات التي تم إرسالها كما تم تسجيلها بواسطة Fiddler:

POST http://192.168.0.102/MicroControllerComSvc.svc HTTP/1.1
Content-Type: text/xml; charset=utf-8
SOAPAction: "http://tempuri.org/IMicroControllerComSvc/GetMicrocontrollerData"
Host: 192.168.0.102
Content-Length: 237
Expect: 100-continue
Accept-Encoding: gzip, deflate
Connection: Keep-Alive

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><GetMicrocontrollerData xmlns="http://tempuri.org/"><microControllerData>1,1,1,1,2,2,1,0,100,300</microControllerData></GetMicrocontrollerData></s:Body></s:Envelope>

تم الاستلام:

HTTP/1.1 405 Method Not Allowed
Cache-Control: private
Allow: GET, HEAD, OPTIONS, TRACE
Content-Type: text/html; charset=utf-8
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Tue, 01 Mar 2016 10:44:44 GMT
Content-Length: 5671

وهذا هو الجسم: https://dl.dropboxusercontent.com/u/2237590/405.html

يبدو أن هذا يشير إلى أنني يجب أن ألقي نظرة في تعيين المعالج ولكن ليس لدي أي فكرة عما يجب تحريره هناك.

المزيد من المعلومات

لنقم بتوسيع المعلومات لفهم السياق بشكل أعم:

قد يكون الخطأ الذي تواجهه “405 Method Not Allowed” ناتجًا عن عدة عوامل، والتي يجب فحصها بعناية لتحديد السبب الرئيسي للمشكلة. في سياق خدمات الويب وبروتوكول SOAP، يشير هذا الخطأ إلى أن الأسلوب المستخدم في الطلب (في هذه الحالة POST) غير مسموح به على الخادم.

أولًا وقبل كل شيء، يجب التحقق من أن الخدمة الخاصة بك تمت تكوينها بشكل صحيح لدعم أسلوب POST. يمكنك فحص ذلك في ملف تكوين الخدمة (web.config) الخاص بها. تأكد من أن العقد (contract) يعرف الأسلوب الذي تحاول استخدامه في طلبك.

من الناحية الثانية، يجب التحقق من إعدادات IIS. في مرحلة التكوين، يجب التأكد من أن إعدادات المعالج (Handler Mappings) تدعم الأسلوب POST. يمكن أن يكون هذا الإعداد في بيئة IIS يلعب دورًا حاسمًا في تحديد ما إذا كان الخادم قادرًا على قبول الطلبات POST.

لفحص معالجات الخدمة، انتقل إلى إعدادات الموقع في IIS وابحث عن “Handler Mappings”. هناك، تحقق من أن هناك معالجًا يدعم طلبات POST للخدمة الخاصة بك.

في حالة عدم وجود أي تقدم، يمكن أن تكون هناك حاجة أيضًا إلى فحص التكوين الأماني في IIS، بالتأكيد على أن الأسلوب POST مسموح به.

المزيد من المعلومات حول تفاصيل إصدارات IIS و.NET Framework التي تستخدمها يمكن أن تساعد في تحديد مشكلة محددة. قم بفحص سجلات الأخطاء في IIS والحفاظ على تسجيل الأحداث لتحديد سبب الخطأ بشكل أدق.

في الختام، فإن فهم التكوينات وتحليل البيانات التي تم تسجيلها بواسطة Fiddler يمكن أن يساعد في تحديد الخطوات التي يجب اتخاذها لتصحيح هذا الخطأ وتفاديه في المستقبل.

زر الذهاب إلى الأعلى