Служба WCF, возвращающая «метод не разрешен» - PullRequest
39 голосов
/ 03 сентября 2008

В процессе разработки моей первой службы WCF, и когда я пытаюсь ее использовать, я получаю «Метод не разрешен» без других объяснений.

Мой интерфейс настроен с помощью ServiceContract и OperationContract:

    [OperationContract]
    void FileUpload(UploadedFile file);

Наряду с фактическим методом:

    public void FileUpload(UploadedFile file) {};

Для доступа к Сервису я ввожу http://localhost/project/myService.svc/FileUpload но я получаю ошибку «Метод не разрешен»

Я что-то упустил?

Ответы [ 8 ]

72 голосов
/ 07 января 2010

Если вы используете атрибут [WebInvoke(Method="GET")] в сервисном методе, убедитесь, что вы записали имя метода как «GET», а не «Get» или «get», так как он чувствителен к регистру! У меня была та же ошибка, и мне потребовался час, чтобы понять это.

59 голосов
/ 13 февраля 2009

Ваш браузер отправляет запрос 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.
 }
4 голосов
/ 03 сентября 2008

Основные встроенные типы (например, byte, int, string и массивы) будут автоматически сериализованы WCF. Пользовательские классы, такие как ваш загруженный файл, не будут.

Итак, глупый вопрос (но я должен его задать ...): помечен ли UploadedFile как [DataContract]? Если нет, вам нужно убедиться, что это так, и что каждый член класса, который вы хотите отправить, помечен [DataMember].

В отличие от удаленного взаимодействия, когда пометка класса с помощью [XmlSerializable] позволяла вам сериализовать весь класс, не удосуживаясь отметить элементы, которые вы хотите сериализовать, WCF требует, чтобы вы пометили каждого члена. (Я считаю, что это меняется в .NET 3.5 SP1 ...)

Огромный ресурс для развития WCF - это то, что мы знаем в нашем магазине как «рыбная книга»: Программирование служб WCF Ювала Лоуи. В отличие от некоторых других книг WCF, которые немного суховаты и академичны, эта книга использует практический подход к созданию служб WCF и действительно полезна. Тщательно рекомендуется.

1 голос
/ 03 декабря 2014

У меня была та же самая проблема больше дня - наконец, понял это. Спасибо @Sameh за подсказку.

Ваш сервис работает нормально. Тестирование POST-сообщений с использованием адресной строки браузера не будет работать. Вам нужно использовать Fiddler для проверки POST-сообщения.

Инструкции Fiddler ... http://www.ehow.com/how_8788176_do-post-using-fiddler.html

1 голос
/ 03 сентября 2008

Похоже, вы используете неправильный адрес:

Для доступа к Сервису я ввожу http://localhost/project/myService.svc/FileUpload

Если вы подразумеваете, что это адрес, который вы даете своему клиентскому коду, то я подозреваю, что на самом деле это должно быть:

http://localhost/project/myService.svc
0 голосов
/ 09 июня 2015

Мой случай: настройка службы на новом сервере. ASP.NET 4.0 не был установлен / зарегистрирован должным образом; Расширение svc не было распознано.

0 голосов
/ 22 августа 2012

нужно добавить в 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> 
0 голосов
/ 20 января 2011

Только методы с WebGet могут быть доступны из браузера IE; Вы можете получить доступ к другим глаголам http, просто набрав адрес

Вы можете либо попробовать набор кодов для запуска службы Restful, либо использовать fiddler для проверки других http-глаголов

...