Возвращение службы WCF & # 8220; Метод не разрешен & # 8221;
-
09-06-2019 - |
Вопрос
В процессе разработки моей первой службы 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 " а не " получить " или " получить " так как он чувствителен к регистру! У меня была та же ошибка, и мне потребовался час, чтобы понять это. Р>
Основные встроенные типы (например, 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
У меня была та же самая проблема больше дня - наконец, понял это. Спасибо @Sameh за подсказку.
Возможно, ваш сервис работает нормально. Тестирование POST-сообщений с использованием адресной строки браузера не будет работать. Вам нужно использовать Fiddler для проверки сообщения POST.
Инструкции Fiddler ... http://www.ehow.com/how_8788176_do-post-using-fiddler.html р>
В браузере IE доступны только методы с WebGet; Вы можете получить доступ к другим глаголам http, просто набрав адрес
Вы можете либо попробовать набор кодов для запуска службы Restful, либо использовать fiddler для проверки других ваших 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 не было распознано.