2014-03-27 29 views
0

我有一個ASP.NET Web角色,它在調用特定Controller方法時生成的聲音文件上運行音頻效果實用程序。我完全理解如何使用Process對象來執行進程,設置工作目錄,等待退出並檢查退出代碼。從ASP.NET應用程序執行進程時需要考慮的目錄?

這裏是我的具體問題:

  • 如果我有它在我的ASP.NET項目文件夾中的依賴性,什麼我需要做的,使它們被放在一個沿EXE文件將Web角色發佈到Azure時的非公共目錄?或者它們是否作爲已發佈軟件包的一部分複製到網站上?如果是這樣,我如何獲得EXE文件的最終位置?我假設我不能通過一個沒有修飾的「//.exe」路徑來引用EXE。換句話說,我需要知道如何處理EXE文件和依賴關係(如果有的話),以便它正確運行,並且我需要知道在發佈的目錄結構中的哪個位置可以找到它,以便我可以將該信息傳遞給Process對象的StartInfo屬性。

  • 是否有任何web.config文件更改我需要做或目錄權限設置我需要更改以使其工作?

注:我知道從ASP.NET線程由於可擴展性和超時的問題運行的進程的需要注意的地方:

Launching new process from ASP.NET

然而,大多數的時間實用程序不需要運行,因爲Controller方法返回的大多數聲音文件已經生成,並且正從數據庫的BLOB字段中提取。另外,我已經對轉換進行了計時,並且使用單個內核在最差情況下運行大約需要200到500毫秒。

回答

1

這樣做的一個方法是:

  1. 把所有的EXE文件和相關文件放到一個文件夾(可以說「MyFolder文件」)
  2. 有文件夾作爲項目的一部分,使得發佈系統像普通文件一樣拷貝它。
  3. 具有以下web.config條目。這確保了沒有人可以從外部訪問來自URL的文件。
  4. 在您的代碼中,您始終可以使用Server.MapPath來獲取EXE路徑等,以供流程類使用。
<location path="MyFolder"> 
    <system.web> 
     <authorization> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
</location> 

有可能通過防止該文件夾的訪問的其他方式:

  1. URL重寫規則,因此,只有您的網站http_referrers被允許訪問它們。即沒有直接盜鏈。
  2. HTTP處理程序等
+0

有沒有把這些文件是「www」的樹之外,公開提供文件的目錄下的一個文件夾的方式? –

+1

有,但您需要手動將文件複製到那裏。自然發佈流程不會在基本網站路徑之外執行任何操作。另外,從asp.net訪問這些文件夾可能是一個問題,因爲您需要設置顯式權限。並且還需要知道主機Web服務器的文件系統路徑..最後會變得棘手。 –

+0

謝謝。整蠱正是我想要避免的。 –

相關問題