Возвращение службы WCF & # 8220; Метод не разрешен & # 8221;

StackOverflow https://stackoverflow.com/questions/41155

  •  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 и действительно полезна. Тщательно рекомендуется.

В браузере 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 не было распознано.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top