سؤال

أثناء عملية تطوير أول خدمة WCF وعندما أحاول استخدامها، أحصل على "الطريقة غير مسموح بها" بدون أي تفسير آخر.

لقد قمت بإعداد الواجهة الخاصة بي مع ServiceContract وOperationContract:

    [OperationContract]
    void FileUpload(UploadedFile file);

جنبا إلى جنب مع الطريقة الفعلية:

    public void FileUpload(UploadedFile file) {};

للوصول إلى الخدمة التي أدخلتها http://localhost/project/myService.svc/FileUploadلكني أتلقى الخطأ "الطريقة غير مسموح بها".

هل فاتني شيء؟

هل كانت مفيدة؟

المحلول

يرسل متصفحك طلب HTTP GET:تأكد من وجود سمة WebGet الخاصة بالعملية في العقد:

[ServiceContract]
public interface IUploadService
{
    [WebGet()]
    [OperationContract]
    string TestGetMethod(); // This method takes no arguments, returns a string. Perfect for testing quickly with a browser.

    [OperationContract]
    void UploadFile(UploadedFile file); // This probably involves an HTTP POST request. Not so easy for a quick browser test.
 }

نصائح أخرى

إذا كنت تستخدم [WebInvoke(Method="GET")] في طريقة الخدمة، تأكد من كتابة اسم الطريقة على أنه "GET" وليس "Get" أو "get" لأنه حساس لحالة الأحرف!كان لدي نفس الخطأ واستغرق الأمر مني ساعة لمعرفة ذلك.

الأنواع الجوهرية الأساسية (على سبيل المثال. byte, int, string, ، والمصفوفات) سيتم إجراء تسلسل لها تلقائيًا بواسطة WCF.لن تكون الفئات المخصصة، مثل UploadedFile، موجودة.

لذا سؤال سخيف (ولكن يجب أن أسأله ...):تم وضع علامة على الملف الذي تم تحميله على أنه ملف [DataContract]؟إذا لم يكن الأمر كذلك، فسوف تحتاج إلى التأكد من أنه كذلك، وأن كل عضو في الفصل الذي تريد إرساله تم وضع علامة [DataMember عليه].

على عكس العمل عن بعد، حيث يسمح لك وضع علامة على الفصل باستخدام [XmlSerializable] بإجراء تسلسل للفصل بأكمله دون الحاجة إلى تحديد الأعضاء الذين تريد إجراء تسلسل لهم، يحتاج WCF إلى ترميز كل عضو.(أعتقد أن هذا يتغير في .NET 3.5 SP1...)

من الموارد الهائلة لتطوير WCF ما نعرفه في متجرنا باسم "كتاب الأسماك": برمجة خدمات WCF بواسطة جوفال لوي.على عكس بعض كتب WCF الأخرى، والتي تعتبر جافة وأكاديمية بعض الشيء، فإن هذا الكتاب يأخذ منهجًا عمليًا لبناء خدمات WCF وهو مفيد بالفعل.موصى به تمامًا.

يبدو أنك تستخدم عنوانًا غير صحيح:

للوصول إلى الخدمة التي أدخلتها http://localhost/project/myService.svc/FileUpload

بافتراض أنك تقصد أن هذا هو العنوان الذي تعطيه رمز العميل الخاص بك، أعتقد أنه يجب أن يكون في الواقع:

http://localhost/project/myService.svc

لقد كنت أعاني من نفس المشكلة منذ أكثر من يوم الآن - وأخيراً اكتشفتها.شكرا @سامح على التلميح.

من المحتمل أن خدمتك تعمل بشكل جيد.لن ينجح اختبار رسائل POST باستخدام شريط العناوين في المتصفح.تحتاج إلى استخدام Fiddler لاختبار رسالة POST.

تعليمات عازف الكمان...http://www.ehow.com/how_8788176_do-post-using-fiddler.html

يمكن الوصول إلى الأساليب التي تحتوي على WebGet فقط من خلال متصفح IE؛يمكنك الوصول إلى أفعال http الأخرى بمجرد كتابة العنوان

يمكنك إما تجربة مجموعة أدوات بدء تشغيل الخدمة المريحة أو استخدام عازف الكمان لاختبار أفعال http الأخرى

تحتاج إلى إضافة web.config

<endpoint address="customBinding" binding="customBinding" bindingConfiguration="basicConfig" contract="WcfRest.IService1"/>  

<bindings>  
    <customBinding>  
        <binding name="basicConfig">  
            <binaryMessageEncoding/>  
            <httpTransport transferMode="Streamed" maxReceivedMessageSize="67108864"/>  
        </binding>  
    </customBinding> 

قضيتي:تكوين الخدمة على الخادم الجديد.لم يتم تثبيت/تسجيل ASP.NET 4.0 بشكل صحيح؛لم يتم التعرف على ملحق svc.

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