Возврат сервиса WCF "Метод не разрешен"
В процессе разработки моей первой службы WCF, и когда я пытаюсь ее использовать, я получаю "Метод не разрешен" без каких-либо других объяснений.
У меня есть интерфейс с ServiceContract и OperationContract:
[OperationContract]
void FileUpload(UploadedFile file);
Наряду с фактическим методом:
public void FileUpload(UploadedFile file) {};
Чтобы получить доступ к Сервису, введите http://localhost/project/myService.svc/FileUpload
но я получаю ошибку "Метод не разрешен"
Я что-то пропустил?
Ответы
Ответ 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-глаголов