2009-06-05 30 views
6

我已經創建了一個示例項目來簡化我的問題。我有這樣的簡單處理:HTTP處理程序使用卡西尼,但不與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; } } 
} 

然後,在我的配置,我有這樣的:

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

現在,當我打我的http://server/Survey處理火災。

如果我將項目更改爲使用IIS 6運行,它不會觸發(404)。 我手動試圖通過增加在IIS處理程序: - 網站屬性 - 主目錄 - 配置 - 添加(瀏覽到我的網站的.dll文件),擴展:調查結果顯示,取消選中「確認文件是否存在」

我注意到IIS(如此有用)添加了「。」在我的擴展面前,所以我用「b.Survey」打了網站;仍然404.

當然可以在IIS 6中添加一個處理程序?

回答

6

「我試圖通過手動添加處理程序IIS: - 網站屬性 - 主目錄 - 配置 - 添加(瀏覽到我的網站的.dll文件),擴展:調查結果顯示,取消確認文件是否存在」

這聽起來像你正在使用錯誤的「可執行」路徑。可執行文件路徑應指向aspnet isapi dll,而不是包含HttpHandler實現的dll。

嘗試使用.aspx擴展名映射到的相同路徑(通常爲:c:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ aspnet_isapi.dll)。

+0

當我這樣做時,我得到一個完全空的迴應。 – dudeNumber4 2009-06-05 15:49:22

+0

我認爲你實際上沒有被重定向到Score.aspx? 您是否在IIS中使用通配符(*)映射導航到http:// server/survey/URL? – etorrejon 2009-06-05 16:21:47

+0

我剛剛意識到我的問題;在我將可執行文件路徑改爲指向aspnet之後,我需要更正我的配置文件(我在IIS中將擴展名更改爲「.wtf」,因此我需要將配置更改爲path =「*。wtf 「 – dudeNumber4 2009-06-05 16:41:23

3

在卡西尼中,所有事情都會經過您的開發服務器,即使您嘗試在集成模式下使用它,服務器中的編程也會引發異常。

在IIS7中,如果您在集成模式下運行應用程序,它將工作。

在IIS6中,您必須將path =「*」分配給ASPNET_ISAPI.dll,然後在web.config中使用與上面相同的引用代碼,否則必須爲處理程序在路徑中分配擴展名。

如果您在IIS6中將aspnet isapi添加爲*,則無法使用「無擴展IIS6」或類似的分步教程。

+0

我想我讓它看起來像我想要一個擴展名url的處理程序;我不。我只想讓我的處理程序開火。如果我將「wtf」作爲IIS的映射/應用程序擴展對話框的擴展名,並嘗試點擊「a.wtf」,它仍然不會觸發。 – dudeNumber4 2009-06-05 15:12:34

+0

是的,好吧,我暗示的是web.config和asp.net isapi需要匹配,而您目前的解決方案沒有這樣做。無論如何,看起來另一個人對你說的更好。 – 2009-06-05 22:29:29