在虛擬空間上反搭建mvc+silverlight過程

發生在我的新同事身上,不止一次。希望你們看到不要生氣,沒人知道誰是我同事的。當我發ftp://192.168.123.4,我們公司的ftp的地址給他們並告訴他們公司資料有一部分放上面。他們第一反應就是輸入到浏覽器中。有又表達了一次:輸入到資源管理器中。他們都是先是一愣。我指了一個已經打開的文件夾的地址欄說這裏,他們才恍然所悟。
後來我想,一是對ftp的知識有點陌生,二是對資源管理器這個名稱也比較陌生。也可見大家對一些基礎的操作系統的知識還是缺乏。所以大家說網路課上教web,ftp部署等的課程到底是不是重要。那些所謂的專業名稱、術語到底有沒有用?
虛擬空間網站部署我比較推薦 ftp工具部署。今天先用Windows資源管理器直接訪問複制吧。

在虛擬空間上反搭建mvc+silverlight過程
在虛擬空間上反搭建mvc+silverlight過程
登錄進來以後,根據不同服務商你會有不同的文件。一般也就這三個。我見過的4,5種虛擬主機空間都是這樣的。但應該會有例外。
db:存放web的備份,數據庫的備份文件夾
log:存放web曆史記錄的文件夾
在虛擬空間上反搭建mvc+silverlight過程
web:就是你要放網站的地方了。
Web發布
在虛擬空間上反搭建mvc+silverlight過程
右擊一個網站專案,點擊發布,如下圖
在虛擬空間上反搭建mvc+silverlight過程
這裏感覺虛擬主機需要,我只說FTP與文件系統部署。
FTP部署:
在虛擬空間上反搭建mvc+silverlight過程
兩個單選意見已經很明確,就不說了
這裏的web文件夾是針對上面說的,把網站目錄放在web文件夾中的虛擬主機。根據你的情況填寫路徑。並填上用戶名與密碼就可以發布了。
但這個方法穩定性不是很好,就是偶爾會那麽失敗幾次。原因看vs輸出說明,可能網速問題,安全問題,或不知道什麽原因。這時候就換文件系統部署吧。
文件系統部署:
在虛擬空間上反搭建mvc+silverlight過程
這裏目標位置指定一個空文件夾,否則文件就會發布到那個文件夾目錄下,如果是一個有文件的文件夾,就會很亂。好,點擊發布
在虛擬空間上反搭建mvc+silverlight過程

我的桌面上就多了一個web文件夾。然後,就把裏面的內容複制到上面的ftp的web文件夾下面吧!你的網站就發布成功了!
就這麽結束了?不!你可別開心太早,我們部署的可是mvc!
MVC的部署需知
回頭想想,我們要建立一個mvc3的步驟:
安裝好vs2010,新建工程發現沒有mvc3,明白沒安裝
上網下mvc3的安裝包,漢化包,安裝…
新建工程,選.net formwork4.0,有了。
新建好,可以運行了。
然後如同上面步驟,發布mvc3的專案。
在虛擬空間上反搭建mvc+silverlight過程
在虛擬空間上反搭建mvc+silverlight過程
bin下面有那些文件,只有4個。不錯,你按F5的時候可以運行,一切正常。
但發布了不一定可以運行。Why?
回想mvc安裝步驟。
如果你發布到的不是本機的iis上。你能保證發布目標的機器安裝了mvc3的安裝包。
那沒有安裝mvc3的機器我們該怎麽辦?
分析這個問題:
安裝了mvc3的機子有哪些不同?打開:
64位: C:Program Files (x86)Microsoft ASP.NET
32位:
C:Program FilesMicrosoft ASP.NET
這還不是要點。現在打開你的工程,找到引用,對著System.Web.Mvc按F4或點開右鍵菜單,點屬性
看屬性圖說話:
運行時版本:
需要.net 4.0。也就是說應用這個dll必須要.net 4.0。當然,有很多文件可以用2.0支持,如System.Web也有2.0運行時的版本。但mvc3的運行時就必須要用4.0,因爲內部代碼必須用到4.0的相關功能。
複制本地:就是要不要把這個dll複制到bin文件夾中,所謂的本地,就是隨發布而複制
路徑:就是說這個dll文件存放路徑。要點來了。似曾相識的路徑。對,就是mvc3安裝路徑!
說明:當一台安裝有.net4.0卻沒有安裝mvc3的機子又怎麽去引用mvc3安裝目錄下的dll哪?所以我們必須複制本地,讓vs把mvc3的dll帶上,放在bin裏面,問題就解決了。所以,沒有安裝mvc3的機子,只要複制本地,就可以解決這個問題。
再說明不僅僅是mvc3這個dll安裝的機子上會沒有,大部分的dll都可能會沒有。簡單的說就是除非是.net 4.0原生支持的dll因爲安裝.net formwork 4.0的時候會被安裝進去。很多dll是因爲我們安裝vs2010才被安裝進去的。如System.Web.Helpers就是一個vs2010安裝後才有的dll。
所以,最簡單的方法就是,全部設置爲複制本地。本身dll就不大。一般就幾mb。對空間不會照成負擔。只要下次發布是時候選擇“用本地副本替換匹配的文件”。這樣就避免重複複制dll。這也是部署mvc3要關注的問題。
有些人會說,我就是不想全複制進去,我有怎麽知道那些有沒有?
當你將缺少dll的web發布出去,你訪問的時候會報錯。但出于安全要求,是不會顯示錯誤的。所以你要在web.config打開錯處顯示。
<system.web>
<customErrors mode="On"/>
On 代表打開。再打開你的網站,你會發現有所不同。
先不管英語說啥了。紅色那行就是你卻的Dll。(小心頁面有變化但因爲IE緩存頁面而看不出來)
然後咋辦?
自己去有dll的自己上安裝路徑找那個DLL複制到發布的Web的bin目錄下面。
都說全複制本地最方便。呵呵!
MVC路徑解析
mvc3要部署在iis6上面,解決.net 4.0與dll的問題還是不夠的。還有一個路徑解析問題。
這個問題是出在iis6的部署上,iis6以上版本不會再有。
添加解析:右擊IIS中的網站選擇“屬性”-“主目錄”-“配置”-“映射”-“插入”,配置如下:可執行文件:C:WINDOWSMicrosoft.NETFramework 4.0.30196spnet_isapi.dll,確認文件是否存在:不選中點擊確定,最後如下圖所示:
要改iis6,虛擬主機怎麽辦?
首先接受現實。總不能爲解決這個問題黑了人家伺服器吧!
然後找服務商客戶談,把這個修改內容發給客服或技術人員。讓他們給解決。
但事情往往不是那麽順利的。
對方可能沒有伺服器的操作權利,或者不提供配置服務,或要領導批准後不了了之。
那我們就只有自力更生的!通過迂回達到我的目標。
需要在專案中添加兩個文件與修改Global.asax.cs
添加:Default.aspx,全部內容如下:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="DemonstrateWeb._Default" %>
<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%>
代碼文件:Default.aspx.cs,全部內容如下:
using System.Web;
using System.Web.Mvc;
using System.Web.UI;

namespace DemonstrateWeb
{
  public partial class _Default : Page
  {
    public void Page_Load(object sender, System.EventArgs e)
    {
      // Change the current path so that the Routing handler can correctly interpret
      // the request, then restore the original path so that the OutputCache module
      // can correctly process the response (if caching is enabled).

      string originalPath = Request.Path;
      HttpContext.Current.RewritePath(Request.ApplicationPath, false);
      IHttpHandler httpHandler = new MvcHttpHandler();
      httpHandler.ProcessRequest(HttpContext.Current);
      HttpContext.Current.RewritePath(originalPath, false);
      
    }
  }
}

添加這樣的文件就是因爲mvc中沒有Default.aspx主頁.
我們需要讓默認主頁轉到mvc的路由上。
修改Global.asax.cs
public static void RegisterRoutes(RouteCollection routes)
    {
      routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

      routes.MapRoute(
        "Default", // 路由名稱
        "{controller}/{action}.aspx/{id}", // 帶有參數的 URL
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 參數默認值
      );
      routes.MapRoute("NoAction", "{controller}.aspx", new { controller = "home", action = "index", id = "" });//無Action的匹配 
      routes.MapRoute("NoID", "{controller}/{action}.aspx", new { controller = "home", action = "index", id = "" });//無ID的匹配 
      routes.MapRoute("Root", "", new { controller = "home", action = "index", id = "" });//根目錄匹配  
    }
這裏我們改變的路由注冊函數。其實簡單的說就是在所有的路徑後面加上aspx。如:
http://localhost:3572/home/index.aspx
這樣iis6就能識別出來了,這樣一定讓你很糾結,但卻沒有更好的辦法。
說以如果服務商的技術人員能幫我處理好路徑解析是最好的!
Silverlight的部署問題
SilverLight的部署問題其實就是.xap文件名是否能被伺服器支持的問題。
解決的方法:
添加MIME類型。
.xaml application/xaml+xml
.xap application/x-silverlight-app
如圖:

很多服務商會主機管理提供這個服務。
下面方法搜索到的,沒有嘗試過、
但是大多數時候我們並沒有操作IIS的權限。
把.xap文件名改爲.zip(原因大家應該知道,xap文件其實就是zip)。但是zip也可能不會被伺服器支持,因爲這些
免費的空間只能顯示HTML!因此我把.xap改成了.html,SilverLight程序就可以神奇的顯示在HTML頁面裏了。

更多相關文章
  • 微信/QQ空間上顯示iPhone6s plus玫瑰金客戶端方法
    現在蘋果手機已經上市有幾天了,許多的朋友在朋友圈或QQ說說分享時顯示來自iPhone6s plus了,但有一些朋友並沒有iPhone6s plus也顯示了iPhone6s plus了尾吧了,那麽對于這種情況小編就來爲各位介紹微信/QQ空間上顯示iPhone6s plus玫瑰金客戶端方法吧,具體的細節 ...
  • 怎麽在qq空間上顯示iPhone6尾巴qq空間iPhone6尾巴
    怎麽在qq空間上顯示iPhone6尾巴呢,我們會看到一些朋友發的QQ空間會顯示iphone6了,這個現在不是沒有iphone6嗎?怎麽會顯示這個呢,後來發現如下的操作辦法,希望文章能給各位帶來幫助哦.1.我們需要在手機中打開[我的空間]然後點擊[個性化]選項.2.進入個性化之後點擊[我的手機標識]我
  • Virtualbox虛擬磁盤空間壓縮方法講解
    VirtualBox是非常優秀的虛擬機,不過在VirtualBox運行一段時間後,虛擬磁盤
  • 本篇和 ubuntu下kvm的安裝 本屬同篇,不過細想後感覺有必要將其單獨拎出來做個總結 .之前在創建KVM 虛擬機時,宿主機都是通過先按raw格式進行安裝後,再轉化成qcow2格式,最終edit xml文件,並virsh start再重新啓動 .之前網上也看到過很多一步直接安裝成qcow2格式的示 ...
  • 詳解 Android 虛擬機 ART 運行時庫 分析
    ART 將會取代Dalvik虛擬機,因爲 在Dalvik下,應用每次運行的時候,字節碼都需要通過即時編譯器轉換爲機器碼,這會拖慢應用的運行效率,而在ART 環境中,應用在第一次安裝的時候,字節碼就會預先編譯成機器碼,使其成爲真正的本地應用.在最新的Google I/O大會上,Google 發布了關于 ...
  • 免費2g/30g/單個文件最大限制100m/淘寶圖片存儲空間免費爲所有的盜鏈.免費檔案空間: - 上傳100MB的文件 - 無限的MP3上傳 - 無限下載 - 允許直接鏈接免費盜鏈的MP3: - 直接/友情鏈接文件
  • 安裝VirtualBox的教程本站有幾十篇了每一篇的安裝與使用方法稍有一些區別,這裏小編整理了一篇非常全面的CentOS 6 命令行下安裝 VirtualBox 虛擬機步驟和大家分享.1. 准備工作安裝內核更新yum install kernel-develyum update kernel*如果內 ...
  • KVM虛擬機的相關文章小編整理過不少了,下面來給各位整理一篇關于virsh 無法重啓和關閉KVM虛擬機問題的解決辦法,具體如下文所示.virsh 可以通過 reboot.shutdown 來重啓或關閉對應的虛擬機.由于其原理是host通過發送acpi指令來控制虛擬機的電源,如果guest 系統沒有安 ...
一周排行