2012-03-28 12 views
6

Zacząłem robić eksperymenty z iisnode i expressjs, aby utworzyć REST jak API z węzłem.iisnode - IIS7.5: 405 Metoda niedozwolona podczas wykonywania żądania PUT

Więc na server.js stworzyłem coś takiego

app.put("/test", function(req, res){ 
    ... 
}); 

Jednak, kiedy wykonać żądania PUT dostaję 405 Method not allowed z instalacji IIS 7.5.

Każdy pomysł, jak rozwiązać ten problem?

BTW, google już i starał się dodać czasowniki umieścić tu i tam w różnych Handler Mappings bez powodzenia ...

+0

To 99% pewien, że coś w IIS, więc jestem pewien, że brakowało tam coś. Jednak nie mogę naprawdę zajrzeć do twojej konfiguracji IIS :-) –

+0

Dlatego właśnie nie mogę zrozumieć, dlaczego ktoś oprócz masochisty chciałby używać IIS do hosta węzła ... – UpTheCreek

+0

:) Myślę, że to tylko z powodu Środowisko wdrożenia, w którym się znajdujesz. Możliwe, że masz ograniczenia, aby uruchamiać serwery IIS ... w moim przypadku, ponieważ chciałbym wdrożyć go w AppHarbor, ponieważ jest bardziej odpowiedni (z punktu widzenia kosztów), eksperymenty (na przykład Heroku). – Juri

Odpowiedz

21

W końcu znalazłem rozwiązanie tego problemu, a mianowicie WebDavModule blokował moje żądania PUT.

Aby rozwiązać ten problem:

  1. Otwórz swoją Menedżer IIS
  2. Goto konfigurację aplikacji i otwarte "moduły"
  3. Search WebDavModule i usunąć go (menu po prawej stronie)

To zadziałało dla mnie.

Alternatywnie w web.config danej aplikacji dodawać

<system.webServer> 
    ... 
    <modules> 
     <remove name="WebDAVModule"/> 
    </modules> 
</system.webServer> 
2

Jednym z powodów może być to, że web.config nie mapuje szczególny Żądanie, które robisz do obsługi iisnode. W takim przypadku wniosek jest odbierane przez statyczny żądanie obsługi, która nie obsługuje metody put i reaguje z 405.

Aby to naprawić trzeba rejestrację uchwytu iisnode jak to w Twojej web.config: https://github.com/tjanczuk/iisnode/blob/master/src/samples/helloworld/web.config#L7

Ponadto, jeśli zamierzasz używać adresu URL, który nie kończy się na nazwie twojego pliku node.js (jak wydaje się być w powyższym przykładzie), będziesz musiał użyć modułu przepisywania adresu URL, aby dokładnie poinformować IIS, które żądania powinny mieć ich adresy URL zostały przepisane, aby wskazywały adres URL punktu wejścia node.js. Przeczytaj więcej na: http://tomasz.janczuk.org/2011/08/using-url-rewriting-with-nodejs.html

+0

Thx za odpowiedź, ale już znalazłem Twoje posty na blogu i odpowiednio skonfigurowałem moją aplikację ... bez żadnego sukcesu. Znalazłem rozwiązanie teraz. (patrz poniżej) – Juri

Powiązane problemy