2012-04-04 75 views
7

我在使用ServiceStack與IIS6中的HTTPS一起工作時出現問題,我似乎無法找到任何設置該文檔的文檔。 目前我有一個像這樣的端點設置 - http://example.com/api.ashx。當我瀏覽到這個時,我得到了有用的ServiceStack生成頁面,該頁面解釋了可用於http://example.com/api.ashx/metadata的API。 當我瀏覽到https://example.com/api.ashx(注意HTTPS)我不是得到這個錯誤信息 - 在「/」應用無法通過HTTPS獲得ServiceStack在IIS6中的工作

服務器錯誤。無法找到該資源。 描述:HTTP 404.您正在查找的資源(或其中一個 依賴關係)可能已被刪除,其名稱已更改,或者 暫時不可用。請檢查以下URL並確定 拼寫正確。請求的URL:/api.ashx

,我有以下設立在我的web.config(按照這裏的例子 - http://www.servicestack.net/ServiceStack.Hello/) -

<!-- ServiceStack: Required to host at: /api.ashx --> 
    <location path="api.ashx"> 
     <system.web> 
      <httpHandlers> 
       <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*"/> 
      </httpHandlers> 
     </system.web> 

在我的本地Windows 7盒我跑IIS7和它工作得很好,但測試和現場環境仍然使用IIS6,我無法讓它在那裏工作。

使用https時,其他常規aspx頁面正常工作。

我會很感激任何能夠推動我朝着正確方向發展的人!

回答

9

IIS 6的問題是,IIS 6.0請求管道無法識別沒有ASP.NET擴展的路徑,例如.aspx不會傳遞給ASP.NET isapi hander。所以,一般有2個選項讓這樣的事情發生,讓你可以ServiceStack在IIS 6上運行:

  1. 變化的web.config「servicestack.ashx」

    的servicestack路徑從「*」

    <的System.Web >

    < HttpHandlers的> <添加路徑= 「servicestack.ashx」 類型= 「ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory,ServiceStack」 動詞= 「*」/ > </HttpHandlers的>

    </system.web>

  2. 添加通配符映射爲你的虛擬目錄所有未處理請求傳遞到ASP.NET: 按照以下步驟來創建一個通配符腳本映射與IIS 6。0:

    1. 右鍵點擊一個網站,並選擇屬性
    2. 選擇主目錄選項卡
    3. 點擊配置按鈕
    4. 選擇映射選項卡
    5. 單擊插入按鈕(見圖4)
    6. 將aspnet_isapi.dll的路徑粘貼到可執行文件字段中(可以從腳本映射中爲.aspx文件複製此路徑)
    7. 取消選中ch標記確認文件eckbox存在
    8. 單擊確定按鈕

IIS 6.0 Wildcard mapping

+0

其實,我錯過了另一個步驟(證書相關問題)。我的錯。這有助於雖然,謝謝:) – 2012-04-05 00:01:53

+0

嘗試選項1:我現在得到一個404錯誤,而不是處理程序未找到錯誤,嘗試選項2:仍然得到處理程序未找到錯誤,在設置通配符擴展映射的選項後再次嘗試選項1 2:404錯誤。這裏有其他想法嗎?我非常難以讓這個在IIS6中工作。 – kmehta 2015-06-05 18:08:32

1

mythz答案並沒有爲我工作。

我通過使用servicestack配置向web.config添加位置標記,從而得到它的工作。 我發現servicestack與路徑= 「*」 的工作 - 但花了很多請求(Episerver),但解決它是這樣的:

<location path="UniqueTag"> 
    <system.web> 
     <httpHandlers> 
      <add path="*" type="ServiceStack.WebHost.Endpoints.ServiceStackHttpHandlerFactory, ServiceStack" verb="*" /> 
     </httpHandlers> 
    </system.web> 
</location> 

然後前面加上UniqueTag所有路線:

[Route("/UniqueTag/DeletePost/{Id}", Verbs = "POST")] 

但請注意,mythz的答案中的選項2也可能是必需的,因爲它是我們解決方案中的默認設置。