Подтвердить что ты не робот

Возврат сервиса WCF "Метод не разрешен"

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

У меня есть интерфейс с ServiceContract и OperationContract:

    [OperationContract]
    void FileUpload(UploadedFile file);

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

    public void FileUpload(UploadedFile file) {};

Чтобы получить доступ к Сервису, введите http://localhost/project/myService.svc/FileUpload но я получаю ошибку "Метод не разрешен"

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

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

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

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

Ответ 4

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

Чтобы получить доступ к Сервису, введите http://localhost/project/myService.svc/FileUpload

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

http://localhost/project/myService.svc

Ответ 5

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

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

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

Ответ 6

вам нужно добавить в 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> 

Ответ 7

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

Ответ 8

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

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