2010-12-10 9 views
24

Czy ktoś może rzucić światło na to? Czuję, że zmarnowałem cały dzień, polując i przeszukując internet, szukając informacji o tym, jak to zrobić. Stworzyłem bardzo prostą usługę WCF REST. Jest to w zasadzie dowód koncepcji. Mam za sobą prostą bazę danych i próbuję ją uruchomić, aby móc przeglądać, tworzyć, aktualizować i usuwać elementy. W tej chwili mam tylko podgląd i aktualizację. Zrobię to później. Na razie nie mogę zrozumieć, dlaczego usuwanie nie działa. Niemal wszystko, co znalazłem do tej pory, mówi mi, że muszę wyłączyć moduł WebDAV. Zrobiłem to, a potem dostałem PUT do pracy. Ale nie mogę sprawić, żeby DELETE działało. Ilekroć próbuję wywołać DELETE za pośrednictwem mojej usługi otrzymuję następujący błąd:Dlaczego błąd HTTP DELETE zwraca błąd 405 - metoda niedozwolona dla mojej usługi RESTful WCF działającej w IIS 7.5?

Serwer zdalny zwrócił nieoczekiwaną odpowiedź: (405) Metoda niedozwolona.

Wygląda więc na to, że gdzieś na moim serwerze nie zezwala na czasownik DELETE. Ale dla mojego życia nie mogę tego rozgryźć. Sprawdziłem już mapowanie programu Handler, a program obsługi pozwala na użycie wszystkich czasowników dla rozszerzenia .SVC. Wyłączyłem WebDAV. Nie jestem pewien, gdzie jeszcze szukać. Używam usług IIS 7.5 w systemie Windows Server 2008 R2.

(mogę dostarczyć kod, jeśli to pomoże w ogóle)

Dzięki, Corey

Odpowiedz

21

Właśnie spędziłem mnóstwo czasu próbuje dowiedzieć się, dlaczego ciągle się 405 Method Not Allowed przy użyciu DELETE czasownika. Wszystko, co przeczytałem, powiedziało o odinstalowaniu WebDAV z IIS, ale wydawało się, że złamie IIS, ponieważ wszystkie witryny dały 503 błędy. Zainstalowałem go ponownie, a następnie zacząłem szukać w IIS dla niektórych ustawień.

Okazuje się, że problem dotyczy interfejsu WebDAV i ma on węzeł na stronie funkcji IIS o nazwie "WebDAV Authoring". Kliknięcie tego przycisku pozwala następnie kliknąć Ustawienia WebDAV ..., aby uzyskać stronę właściwości. W sekcji Zażądaj zachowania filtrowania, ustaw Zezwalaj na filtrowanie czasowników na Fałszywe wydawało się, że to dla mnie racja (YMMV).

To wydawało się być popularnym rezultatem podczas szukania rozwiązania, więc pomyślałem, że dodam do listy sugerowanych rozwiązań.

0

Dobrze, że nie jestem pewien, czy to naprawdę jest odpowiedź na moje pytanie, ale to nie rozwiązuje problemu. Po prostu rozpocząłem nowy projekt w Visual Studio i tym razem użyłem szablonu usługi REST usługi .NET, który znalazłem online. Potem przeniosłem stary kod z poprzedniej próby i użyłem go w nowym projekcie. To działało jak czar. Wszystkie cztery czasowniki działają teraz poprawnie (GET, PUT, POST i DELETE). Więc teraz działa.

Corey

45

Jeśli ktoś ma ten sam problem.

Oto inny sposób wypróbowania.

w web.config

<system.webServer> 
    <modules> 
     <remove name="WebDAVModule" /> 
    </modules> 
    <handlers> 
     <remove name="WebDAV" /> 
    </handlers> 
</system.webServer> 
+3

Poprzez IIS GUI, przejdź do modułów ** ** i ** Handler Mappings ** usunąć. Dzięki Maxisam! – mcNux

+0

To działało dla mnie, mimo że WebDAV był już skonfigurowany do zezwalania na DELETE i był również skonfigurowany z Allow Verb Filtering: false. –

+0

To było wszystko, co musiałem zrobić, aby uzyskać metody PUT i DELETE z 405 w mojej usłudze WCF RESTful. Dziękuję Ci. – kurt

1

Otwórz witryny Handler Mappings w IIS Menedżer

Edit każdy obsługi chcesz usunąć z kliknięcie Ograniczenia żądań, wybierając zakładkę czasowniki, a następnie dodać do DELETE "Jedna z poniższych" list lub, jeśli jest to stosowne w twoich obawach, zezwól na wszystkie czasowniki.

Może być konieczne ponowne uruchomienie strony internetowej i/lub rekompilacji kodu