要將ASP.NET 4.0網站部署到Shared Web Hosting環境,處理了兩個小問題,順手寫成筆記。
 
所謂Shared Web Hosting,指廠商提供了IIS主機(多半也同時提供SQL Server、MySQL),開放收費服務讓客戶將寫好的Web Application部署上去。但並非一個客戶一台專屬VM,而是全部的客戶掛在同一台IIS主機的80 Port,再依連接URL的Domain Name區分不同的網站。客戶可透過FTP或網頁上傳程式,再用網頁介面進行IIS的相關設定(不支援IIS管理員直接管理)。由於同一個IIS網站由一堆程式共用,所以會限定Medium Trust Level(在這篇曾提過)、部分元件/檔案路徑存取方面也多了一些限制,但仍可實現絕大部分的ASP.NET Application功能。(相對於獨立VM解決方案的天價租金,這點限制算不了什麼,呵~~)
 
今天上傳的是ASP.NET 4.0的Web Application,已在本機IIS Expression上測試無誤,在廠商的IIS網頁管理介面開啟一個Web Application目錄,設定Runtime為.NET 4.0,接著上傳程式及網站相關檔案就部署完成。但一執行出現以下錯誤:
This collection already contains an address with scheme http.  There can be at most one address per scheme in this collection. If your service is being hosted in IIS you can fix the problem by setting 'system.serviceModel/serviceHostingEnvironment/multipleSiteBindingsEnabled' to true or specifying 'system.serviceModel/serviceHostingEnvironment/baseAddressPrefixFilters'.
Parameter name: item
很棒的錯誤訊息,訊息中內附射茶包教學。應是先前提到Shared Web Hosting採用Host Header區分同一80 Port的多網站產生的議題,按照訊息中的提示,在web.config中加上multipleSiteBindingsEnabled="true”:

<system.serviceModel>
  <serviceHostingEnvironment aspNetCompatibilityEnabled="true"  multipleSiteBindingsEnabled="true"/>
</system.serviceModel>

問題就可排除,但要執行WCF時出現另一個訊息:

IIS specified authentication schemes 'IntegratedWindowsAuthentication, Anonymous', but the binding only supports specification of exactly one authentication scheme. Valid authentication schemes are Digest, Negotiate, NTLM, Basic, or Anonymous. Change the IIS settings so that only a single authentication scheme is used.

爬文發現,這是因為網站設定同時啟用匿名存取及整合驗證的緣故,解決方法是用IIS管理介面將Web Application設定只開放匿名存取。終於,程式順利運轉囉~~


Comments

Be the first to post a comment

Post a comment