WebDev.WebServer 学习
? ? ?自從Vs2005起,Vs開發環境便自帶了WebDev.WebServer,就是這個圖標,它實際上是一個小型的Web服務器,專用于.net平臺。大家經常調試程序它還是相當的方便,經過小小的配置就可以指向某個文件夾,使該文件夾成為網站目錄已供訪問。
??? WebDev.WebServer確實很輕便,同時它本身是.net程序,才2個文件,作為測試和演示環境是非常的好用,在xp也能很好的運行,Xp的IIS5實在是不方便用。
??? 但是自帶的WebDev.WebServer只能用于本機,那是因為MS對其進行了限制,因為作出它的目的,本身是為了Vs的開發更方便而已,但是很多測試也是基于網絡的,至少你不希望別人測試一些網站,總得來用你的電腦吧。
??? WebDev.WebServer一共是兩個文件,一個是WebDev.WebServer.exe,另一個是WebDev.WebHost.dll,另外說一下WebDev.WebServer是安裝開發環境才有的,不是安裝.net framework里面的東東,所以你提取這兩個文件都需要已經安裝有開發環境下來進行。
?新建一個項目 StartExamples
在Program類中加入以下代碼:
?internal?static?class?Program
????{
????????[STAThread]
????????private?static?void?Main(string[]?args)
????????{
????????????string?currentDirectory?=?Environment.CurrentDirectory;
????????????string?appName?=?"";
????????????ProcessParameters(args,?ref?currentDirectory,?ref?appName);
????????????string?devServerExecutable?=?GetDevServerExecutable(CheckQsf40(currentDirectory));
????????????string?portNumber?=?GetPortNumber();
????????????if?(!File.Exists(devServerExecutable)){
????????????????Console.WriteLine("Cannot?find?the?ASP.NET?Development?Server!");
????????????}else{
????????????????StartProcess(devServerExecutable,?portNumber,?currentDirectory,?appName);
????????????}
????????}
????????private?static?void?ProcessParameters(string[]?args,?ref?string?physPath,?ref?string?appName)
????????{
????????????foreach?(string?str?in?args)
????????????{
????????????????if?(str.StartsWith("-path:",?StringComparison.OrdinalIgnoreCase))
????????????????{
????????????????????physPath?=?str.Remove(0,?6);
????????????????}
????????????????else?if?(str.StartsWith("-appname:",?StringComparison.OrdinalIgnoreCase))
????????????????{
????????????????????appName?=?str.Remove(0,?9);
????????????????}
????????????????else?if?(str.StartsWith("-help",?StringComparison.OrdinalIgnoreCase)?||?str.StartsWith("-?",?StringComparison.OrdinalIgnoreCase))
????????????????{
????????????????????ShowHelp();
????????????????}
????????????}
????????}
????????private?static?void?ShowHelp()
????????{
????????????MessageBox.Show("Usage:?{0}?[-path:<path?to?root?of?web>]?[-appname:/<name?of?web?application>]",?
????????????????Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf(@"\")?+?1));
????????}
????????private?static?string?GetDevServerExecutable(bool?check40)
????????{
????????????string?str?=?string.Empty;
????????????string?path?=?string.Empty;
????????????if?(check40)
????????????{
????????????????path?=?string.Format(@"{0}\Microsoft?Shared\DevServer\10.0\WebDev.WebServer40.exe",?Environment.GetEnvironmentVariable("CommonProgramFiles"));
????????????????if?(File.Exists(path)){
????????????????????str?=?path;
????????????????}else{
????????????????????path?=?string.Format(@"{0}\Microsoft?Shared\DevServer\10.0\WebDev.WebServer40.exe",?Environment.GetEnvironmentVariable("CommonProgramFiles(x86)"));
????????????????????if?(File.Exists(path)){
????????????????????????str?=?path;
????????????????????}
????????????????}
????????????}
????????????if?(str.Length?==?0){
????????????????path?=?string.Format(@"{0}\Microsoft?Shared\DevServer\10.0\WebDev.WebServer20.exe",?Environment.GetEnvironmentVariable("CommonProgramFiles"));
????????????????if?(File.Exists(path)){
????????????????????str?=?path;
????????????????}else{
????????????????????path?=?string.Format(@"{0}\Microsoft?Shared\DevServer\10.0\WebDev.WebServer20.exe",?Environment.GetEnvironmentVariable("CommonProgramFiles(x86)"));
????????????????????if?(File.Exists(path)){
????????????????????????str?=?path;
????????????????????}
????????????????}
????????????}
????????????if?(str.Length?==?0){
????????????????path?=?string.Format(@"{0}\Microsoft?Shared\DevServer\9.0\WebDev.WebServer.exe",?Environment.GetEnvironmentVariable("CommonProgramFiles"));
????????????????if?(File.Exists(path)){
????????????????????str?=?path;
????????????????}else{
????????????????????path?=?string.Format(@"{0}\Microsoft?Shared\DevServer\9.0\WebDev.WebServer.exe",?Environment.GetEnvironmentVariable("CommonProgramFiles(x86)"));
????????????????????if?(File.Exists(path)){
????????????????????????str?=?path;
????????????????????}
????????????????}
????????????}
????????????if?(str.Length?!=?0){
????????????????return?str;
????????????}
????????????string?str3?=?"50727";
????????????RegistryKey?key?=?Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\.NETFramework\policy\v2.0");
????????????if?((key?!=?null)?&&?(key.ValueCount?>?0)){
????????????????str3?=?key.GetValueNames()[0];
????????????}else{
????????????????MessageBox.Show("Error?while?reading?.NET?Framework?2.0?configuration!?Assuming?default?values.");
????????????}
????????????return?string.Format(@"{0}\Microsoft.NET\Framework\v2.0.{1}\WebDev.WebServer.exe",?Environment.GetEnvironmentVariable("WINDIR"),?str3);
????????}
????????private?static?bool?CheckQsf40(string?physPath)
????????{
????????????string?path?=?physPath?+?@"\Web.Config";
????????????if?(File.Exists(path)){
????????????????StreamReader?reader?=?new?StreamReader(path);
????????????????string?str2?=?reader.ReadToEnd();
????????????????reader.Close();
????????????????return?(str2.IndexOf("System.Data.Linq,?Version=4.0.0.0")?!=?-1);
????????????}
????????????return?false;
????????}
????????private?static?string?GetPortNumber()
????????{
????????????bool?flag?=?false;
????????????TcpListener?listener?=?null;
????????????int?port?=?0;
????????????try
????????????{
????????????????listener?=?new?TcpListener(IPAddress.Any,?0x206d);
????????????????listener.ExclusiveAddressUse?=?true;
????????????????listener.Start();
????????????????port?=?((IPEndPoint)listener.LocalEndpoint).Port;
????????????????listener.Stop();
????????????}
????????????catch?(SocketException)
????????????{
????????????????flag?=?true;
????????????}
????????????if?(flag)
????????????{
????????????????try
????????????????{
????????????????????listener?=?new?TcpListener(IPAddress.Any,?0);
????????????????????listener.Start();
????????????????????port?=?((IPEndPoint)listener.LocalEndpoint).Port;
????????????????????listener.Stop();
????????????????}
????????????????catch?(Exception)
????????????????{
????????????????}
????????????}
????????????if?(port?==?0)
????????????{
????????????????port?=?0x206d;
????????????}
????????????return?port.ToString();
????????}
????????private?static?void?StartProcess(string?cassiniExecutable,?string?portNumber,?string?physPath,?string?appName)
????????{
????????????Process?process?=?new?Process();
????????????process.StartInfo.FileName?=?cassiniExecutable;
????????????process.StartInfo.WindowStyle?=?ProcessWindowStyle.Hidden;
????????????process.StartInfo.Arguments?=?string.Format("/port:{0}?/path:\"{1}\"?/vpath:\"{2}\"",?portNumber,?physPath,?appName);
????????????process.Start();
????????????new?WaitMessageForm().ShowDialog();
????????????Process?process2?=?new?Process();
????????????process2.StartInfo.UseShellExecute?=?true;
????????????process2.StartInfo.FileName?=?string.Format("http://localhost:{0}{1}",?portNumber,?appName);
????????????process2.Start();
????????}
????}
在StartExamples項目中加入?WaitMessageForm 窗體加入以下代碼:
public?class?WaitMessageForm?:?Form{
????private?IContainer?components;
????private?Label?label1;
????public?WaitMessageForm()
????{
????????this.InitializeComponent();
????}
????private?void?InitializeComponent()
????{
????????ComponentResourceManager?manager?=?new?ComponentResourceManager(typeof(WaitMessageForm));
????????this.label1?=?new?System.Windows.Forms.Label();
????????this.SuspendLayout();
????????//?
????????//?label1
????????//?
????????this.label1.AutoSize?=?true;
????????this.label1.Font?=?new?System.Drawing.Font("Microsoft?Sans?Serif",?12F,?System.Drawing.FontStyle.Bold,?System.Drawing.GraphicsUnit.Point,?((byte)(0)));
????????this.label1.Location?=?new?System.Drawing.Point(26,?26);
????????this.label1.Name?=?"label1";
????????this.label1.Size?=?new?System.Drawing.Size(517,?20);
????????this.label1.TabIndex?=?0;
????????this.label1.Text?=?"Please?wait?while?the?ASP.NET?Development?Server?is?started...";
????????this.label1.UseWaitCursor?=?true;
????????//?
????????//?WaitMessageForm
????????//?
????????this.AccessibleDescription?=?"ASP.NET?Development?server?loader";
????????this.AccessibleName?=?"Start?Examples";
????????this.AutoScaleMode?=?System.Windows.Forms.AutoScaleMode.Inherit;
????????this.AutoScaleDimensions?=?new?SizeF(6f,?13f);
????????this.AutoScaleMode?=?AutoScaleMode.Font;
????????this.CausesValidation?=?false;
????????this.ClientSize?=?new?System.Drawing.Size(575,?70);
????????this.ControlBox?=?false;
????????this.Controls.Add(this.label1);
????????this.FormBorderStyle?=?FormBorderStyle.None;
????????this.Name?=?"WaitMessageForm";
????????this.StartPosition?=?System.Windows.Forms.FormStartPosition.CenterScreen;
????????this.Text?=?"Loading...";
????????this.UseWaitCursor?=?true;
????????this.ResumeLayout(false);
????????this.PerformLayout();
????}
????protected?override?void?OnLoad(EventArgs?e)
????{
????????base.OnLoad(e);
????????Timer?timer?=?new?Timer();
????????timer.Interval?=?0xfa0;
????????timer.Tick?+=?new?EventHandler(this.closeTimer_Tick);
????????timer.Start();
????}
????private?void?closeTimer_Tick(object?sender,?EventArgs?e)
????{
????????((Timer)sender).Stop();
????????((Timer)sender).Dispose();
????????base.Close();
????}
????protected?override?void?Dispose(bool?disposing)
????{
????????if?(disposing?&&?(this.components?!=?null))
????????{
????????????this.components.Dispose();
????????}
????????base.Dispose(disposing);
????}
????
}?
?運行效果
?
?
快速啟動WebDev.WebServer的方法
直接通過文件夾的快捷菜單來啟動WebDev.WebServer。?
簡單來說就是建立一個注冊表文件,寫入下列內容:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellVS2005 WebServer]
@="啟動Web服務器"
[HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellVS2005 WebServercommand]
@="C:\Windows\Microsoft.NET\Framework\v2.0.50727\Webdev.WebServer.exe /port:8080 /path:"%1""
注意這里是依照安裝了VS2005的情況,如果是VS2008的話,Webdev.WebServer.exe的目錄變了,應當做如下改寫:
[HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellVS2008 WebServer]
@="啟動Web服務器"
[HKEY_LOCAL_MACHINESOFTWAREClassesFoldershellVS2008 WebServercommand]
@="C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\Webdev.WebServer.exe /port:8080 /path:"%1""
如果安裝VS的時候沒有選擇默認的安裝目錄,請自行修改以上內容。
建立這個注冊表文件以后,只要雙擊寫入到注冊表就可以了,想要啟動,只要在文件夾上單擊右鍵就OK了。
這個時候可以看到Webdev.WebServer已經啟動,打開瀏覽器就可以訪問了。
??
?
見可以寫一個bat文件,內容為:set path=%path%;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
WebDev.WebServer.EXE /path:”C:\Inetpub\wwwroot”
這樣每次啟動就比較方便了。
?
??
轉載于:https://www.cnblogs.com/luomingui/archive/2011/07/12/2104477.html
總結
以上是生活随笔為你收集整理的WebDev.WebServer 学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天书夜读:WinDbg配置和使用基础
- 下一篇: jQuery.extend与jQuery