2009-06-05 8 views
6

Stworzyłem przykładowy projekt, aby uprościć mój problem. Mam ten prosty Handler:Obsługa HTTP działa z użyciem Cassini, ale nie z IIS 6

public class HandleThis : IHttpHandler, IRequiresSessionState 
{ 

    public void ProcessRequest(System.Web.HttpContext context) 
    { 
     // Score.aspx just says "success" 
     context.Response.Redirect("Score.aspx"); 
    } 

    public bool IsReusable { get { return true; } } 
} 

Następnie w moim config, mam to:

<httpHandlers> 
<add verb="*" 
path="Survey" 
type="HttpHandlerTest.HandleThis, HttpHandlerTest" /> 

Teraz kiedy uderzę http://server/Survey moje pożarów obsługi.

Jeśli zmienię projekt, aby działał z IIS 6, nie uruchomi się (404). Próbowałem ręcznie dodanie obsługi w IIS poprzez: - Właściwości witryny sieci Web - Home Directory - Konfiguracja - dodaj (przejdź do .dll mojej witryny), rozszerzenie: Survey, odznacz "Sprawdź, czy plik istnieje"

Zauważam, że IIS (tak pomocniczo) dodaje "." przed moim rozszerzeniem, więc trafiłem na stronę z "b.Survey"; nadal 404.

Z pewnością możliwe jest dodanie handler'a w IIS 6?

Odpowiedz

6

"Próbowałem ręcznie dodanie obsługi w IIS poprzez: - Właściwości witryny sieci Web - Home Directory - Configuration - dodaj (przejdź do .dll mojej witryny), rozszerzenie: Survey, odznacz Sprawdź, czy plik istnieje"

Wygląda na to, że używasz niewłaściwej ścieżki "wykonywalny". Ścieżka do pliku wykonywalnego powinna wskazywać na isapi dll aspnet, a nie na dll, która zawiera implementację HttpHandler.

Spróbuj użyć tej samej ścieżki, do której przypisano rozszerzenie .aspx (często jest to: c: \ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll).

+0

Kiedy to zrobię, otrzymuję kompletnie pustą odpowiedź. – dudeNumber4

+0

Rozumiem, że w rzeczywistości nie przekierowano cię na Score.aspx? Czy przechodzisz do strony http: // serwer/ankieta/URL z mapowaniem wieloznacznym (*) w IIS? – etorrejon

+0

Właśnie zdałem sobie sprawę z mojego problemu; po tym, jak zmieniłem ścieżkę do pliku wykonywalnego, aby wskazywała na aspnet, musiałem poprawić to, co miałem w mojej konfiguracji (zmieniłem rozszerzenie na ".wtf" w IIS, więc musiałem zmienić konfigurację na ścieżkę = "*. wtf " – dudeNumber4

3

W Cassini wszystko przechodzi przez serwer deweloperski, mimo że programowanie na serwerze spowoduje zgłoszenie wyjątku, jeśli spróbujesz go użyć w trybie zintegrowanym.

W IIS7 działałoby, jeśli aplikacja jest uruchomiona w trybie zintegrowanym.

W IIS6 należy przypisać ścieżkę = "*" do ASPNET_ISAPI.dll, a następnie mieć ten sam cytowany kod, jak powyżej w pliku web.config, lub trzeba przypisać rozszerzenie do ścieżki dla programu obsługi.

Jeśli masz problemy z dodaniem isapi aspnet jako * w IIS6, google dla "extensionless IIS6" lub coś podobnego w przypadku samouczków krok po kroku.

+0

Wydaje mi się, że sprawiłem, że wyglądało na to, że chciałem obsługiwać adres URL bez rozszerzenia; Ja nie. Chcę tylko, żeby mój przewodnik strzelił. Jeśli wpiszesz "wtf" jako rozszerzenie w oknie dialogowym Mapowania rozszerzeń/aplikacji IIS i spróbuję trafić w "a.wtf", to nadal nie uruchomi się. – dudeNumber4

+0

Tak, cóż, sugerowałem, że isapi web.config i asp.net muszą pasować, a twoje obecne rozwiązanie tego nie zrobiło. W każdym razie wydaje się, że druga osoba lepiej to dla ciebie sformułowała. –