2012-10-15 32 views
1

我已經創建了一個網頁使用Asp.Net MVC 4(VS2010 SP1,Windows 7)。它還通過我可以進行搜索或上傳的東西(數據和文件)提供api。當我在VS2010 SP1的開發服務器上部署頁面時,所有工作正常,但是當我選擇IIS(IIS7)時,api不再工作。 「IsSuccessStatusCode」似乎是錯誤的。但該頁面本身工作,可以從其他機器進行處理。後/得到VS開發服務器,但與IIS7的作品

這是我使用內置的開發服務器的地址: 「HTTP://本地主機:56272/API /」 這我用IIS: 「http://127.0.0.1/api/」

我已經爲IIS創建了一個虛擬目錄(由VS2010完成)。我是否需要另外配置一些東西,或者它可能是僅存在於IIS中的路由問題?

這是我的客戶端 - 類爲MyService - 爲GET:

public MyService(string serviceAdress) //"http://127.0.0.1/api/" 
     { 
      this.serviceAdress = new Uri(serviceAdress); //of type Uri 
      client = new HttpClient(); 
      client.DefaultRequestHeaders.Accept.Add(
       new MediaTypeWithQualityHeaderValue("application/json")); 
     } 
    public Task<IEnumerable<Item>> SearchByTag(string tag) 
    { 
     client.BaseAddress = serviceAdress; 
     var getStuffCall=client.GetAsync("Search/ByTag/" + tag); 
     var r=getStuffCall.ContinueWith(
      t =>t.Result.IsSuccessStatusCode? (t.Result.Content.ReadAsAsync<IEnumerable<Item>>().Result):new List<Item>() 
      ); 
     return r; 
    } 

我的服務器端是這樣的:

public class SearchController : ApiController 
    { 
     [HttpGet] 
     public IEnumerable<Shared.Item> ByTag(string search) 
     {....} 
    } 

這是WebApiConfig路由:

config.Routes.MapHttpRoute(
      name: "SearchApi", 
      routeTemplate: "api/Search/{action}/{search}", 
      defaults: new 
          { 
           controller="Search"         
          } 
     ); 
+0

而不是「調用失敗」,你可以提供什麼實際的Http響應狀態碼,消息等? – tugberk

+0

我現在設法從該調用中獲得結果消息,並且它表示「未找到」之類的東西。 IIS的地址是錯誤的。我忘了添加我的虛擬文件夾的名稱。所以你的問題是一個很好的提示!謝謝。 – Katharina

回答

0

您需要確保該網站和應用程序池具有對該可執行文件的寫入權限的用戶你正在執行你的上傳。在開發服務器中,它不起作用,因爲它在具有正常權限的本地(或域)帳戶下運行。 IIS7在受限用戶帳戶下運行,因此它的權限必須被調整,或者您要上傳的文件夾需要包含此用戶的寫入權限。

調整權限的具體說明可以在這裏找到:http://support.microsoft.com/kb/979124

+0

但是,然後它應該工作,使用GET在數據庫中執行搜索,對吧?另外client.GetAsynch(...)不適用於IIS,但適用於內置服務器。 – Katharina

+0

「http:// 127.0.0.1/api /」是AJAX調用用於執行GET的地址嗎? –

+0

是的,我已經嘗試過使用IIS。 (和「http:// localhost:56272/api /」用於內置服務器的端口。) – Katharina

0

的地址IIS是錯誤的。而不是「http://127.0.0.1/api/」它必須是「http://127.0.0.1/MyVirtualFolderSomething/api/」。

相關問題