引子
源於給客戶做的一個系統, 基於傳統的c/s架構(wpf+wcf), 後來因為客戶需要, 就寫了一些基於Web的查詢小工具, 開發完了要部署的時候才發現, 伺服器上並沒有裝IIS。
伺服器是win 2003 server作業系統, 硬碟上沒保留系統安裝檔案的備份,要裝IIS就得跑一趟機房, 為做一個懶惰的程式員,就開始想方法找歪路啦。
Google之, 得到以下資訊:
- Cassini —— VS內建的ASP.NET Development Server的前身(http://blogs.msdn.com/b/dmitryr/),可惜這玩意只支援本機串連, 而且最高只支援到.net framework 3.5, pass掉。
- IIS Express —— 微軟打算用來替換掉ASP.NET Development Server的工具, 不僅支援遠端連線,.net framework 4更是不在話下, 比VS內建的server功能強大許多, 相信很多vs web開發人員已經用iis express來替換掉vs內建的那個asp.net development server, 可是對我這個web新手來說, 這東西還是重量級了些, 配置又好麻煩,懶得研究, pass掉。
- Cassinidev ——就是本文的主角啦,這是一個開源項目(http://cassinidev.codeplex.com/), 支援遠端連線, 支援.net 3.5和4.0, 可以源碼級重用或程式集重用, 絕對輕量級,部署方便。
樣本
下載:
CassiniDev 3.5.1.8-4.1.0.8 release (官方下載)
下載回來的壓縮包裡有很多的exe及dll檔案, 下面是每個檔案的作用描述:
直接使用的:
CassiniDev.exe:對應.net framework 3.5, asp.net 2.0, windowform gui
CassiniDev4.exe: 對應.net framework 4, asp.net 4.0, windowform gui
CassiniDev-console.exe:對應.net framework 3.5, asp.net 2.0, 控制台程式
CassiniDev4-console.exe:對應.net framework 4, asp.net 4.0, 控制台程式
供二次開發的:
CassiniDev-lib.dll:對應.net framework 3.5, asp.net 2.0
CassiniDev4-lib.dll:對應.net framework 4, asp.net 4.0
供VS調試用的(即用來替換掉VS內建的ASP.Net development server):
WebDev.WebServer.exe
WebDev.WebServer20.exe
WebDev.WebServer40.exe
使用:
一 般情況下, 直接使用上面的exe便可實現asp.net的寄宿了, 但是相應的, 可供我們控制的就比較少, 不自由, 例如實際應用中可能需要把我們的宿主寫成windows Service的形式, 直接用上面的exe就沒法實現了, 這種情況下可以利用cassinidev-lib進行二次開發, 甚至是直接到官網上下載原始碼來產生自己需要的程式, 下面是一段簡單的例子,利用cassinidve4-lib.dll實現一個asp.net的host
在vs2010中建立一wpf應用程式, 在主視窗中加入一TextBox做顯示資訊用, 修改MainWindow代碼如下:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using CassiniDev;
namespace JKAspNetHost
{
/// <summary>
/// MainWindow.xaml 的互動邏輯
/// </summary>
public partial class MainWindow : Window
{
private readonly Server server;
public MainWindow()
{
InitializeComponent();
server = new Server(8038, "/", System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WebApp"),
System.Net.IPAddress.Parse("0.0.0.0"), "", 0, false, false);
server.Start();
textLog.AppendText("伺服器運行中...\r\n");
textLog.AppendText(server.PhysicalPath + "\r\n");
textLog.AppendText(server.RootUrl + "\r\n");
server.RequestComplete += new EventHandler<RequestEventArgs>(server_RequestComplete);
}
void server_RequestComplete(object sender, RequestEventArgs e)
{
//可能由ui線程以外的線程調用, 所以需要Dispatcher.Invoke
Dispatcher.Invoke(new Action(()=>{
textLog.AppendText("Request:" + e.RequestLog.Url + "\r\n");
if (textLog.Text.Length > 10000)
{
textLog.Text = textLog.Text.Substring(textLog.Text.Length - 1000, 1000);
}
textLog.ScrollToEnd();
}));
}
private void Window_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
try
{
server.ShutDown();
}
catch { }
}
}
}
其他用途
1,如果您需要做一些隨光碟片附帶的示範程式或介紹程式, 卻又沒有案頭應用開發經驗, 那麼可以利用cassinidev+webbrowser的來實現, 同一個exe中, 既是服務端又是前端展示層, 無須安裝, 開箱即用。
2,單機應用或小型區域網路應用, 利用強大的html作展示層,使用者體驗不比傳統的MFC, windowFrom差, 開發效率, 介面美觀。
3, 。。。
原文 :http://www.cnblogs.com/sweethome/archive/2011/09/22/2184988.html