实现一个可host asp.net程序的小型IIS(Cassinidev介绍)
2012-04-20 13:13
567 查看
引子
源于给客户做的一个系统,基于传统的c/s架构(wpf+wcf),后来因为客户需要,就写了一些基于Web的查询小工具,开发完了要部署的时候才发现,服务器上并没有装IIS。服务器是win2003server操作系统,硬盘上没保留系统安装文件的备份,要装IIS就得跑一趟机房,为做一个懒惰的程序员,就开始想方法找歪路啦。
Google之,得到以下信息:
Cassini——VS自带的ASP.NETDevelopmentServer的前身(
IISExpress——微软打算用来替换掉ASP.NETDevelopmentServer的工具,不仅支持远程连接,.netframework4更是不在话下,比VS自带的server功能强大许多,相信很多vsweb开发者已经用iisexpress来替换掉vs自带的那个asp.netdevelopmentserver,可是对我这个web新手来说,这东西还是重量级了些,配置又好麻烦,懒得研究,pass掉。
Cassinidev——就是本文的主角啦,这是一个开源项目(
示例
下载:下载回来的压缩包里有很多的exe及dll文件,下面是每个文件的作用描述:
直接使用的:
CassiniDev.exe:对应.netframework3.5,asp.net2.0,windowformgui
CassiniDev4.exe:对应.netframework4,asp.net4.0,windowformgui
CassiniDev-console.exe:对应.netframework3.5,asp.net2.0,控制台程序
CassiniDev4-console.exe:对应.netframework4,asp.net4.0,控制台程序
供二次开发的:
CassiniDev-lib.dll:对应.netframework3.5,asp.net2.0
CassiniDev4-lib.dll:对应.netframework4,asp.net4.0
供VS调试用的(即用来替换掉VS自带的ASP.Netdevelopmentserver):
WebDev.WebServer.exe
WebDev.WebServer20.exe
WebDev.WebServer40.exe
使用:
一般情况下,直接使用上面的exe便可实现asp.net的寄宿了,但是相应的,可供我们控制的就比较少,不自由,例如实际应用中可能需要把我们的宿主写成windowsService的形式,直接用上面的exe就没法实现了,这种情况下可以利用cassinidev-lib进行二次开发,甚至是直接到官网上下载源代码来生成自己需要的程序,下面是一段简单的例子,利用cassinidve4-lib.dll实现一个asp.net的host
在vs2010中新建一wpf应用程序,在主窗口中加入一TextBox做显示信息用,修改MainWindow代码如下:
[code]usingSystem;
usingSystem.Collections.Generic;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Windows;
usingSystem.Windows.Controls;
usingSystem.Windows.Data;
usingSystem.Windows.Documents;
usingSystem.Windows.Input;
usingSystem.Windows.Media;
usingSystem.Windows.Media.Imaging;
usingSystem.Windows.Navigation;
usingSystem.Windows.Shapes;
usingCassiniDev;
namespaceJKAspNetHost
{
///<summary>
///MainWindow.xaml的交互逻辑
///</summary>
publicpartialclassMainWindow:Window
{
privatereadonlyServerserver;
publicMainWindow()
{
InitializeComponent();
server=newServer(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+=newEventHandler<RequestEventArgs>(server_RequestComplete);
}
voidserver_RequestComplete(objectsender,RequestEventArgse)
{
//可能由ui线程以外的线程调用,所以需要Dispatcher.Invoke
Dispatcher.Invoke(newAction(()=>{
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();
}));
}
privatevoidWindow_Closing(objectsender,System.ComponentModel.CancelEventArgse)
{
try
{
server.ShutDown();
}
catch{}
}
}
}
[/code]
其他用途
1,如果您需要做一些随光盘附带的演示程序或介绍程序,却又没有桌面应用开发经验,那么可以利用cassinidev+webbrowser的来实现,同一个exe中,既是服务端又是前端表示层,无须安装,开箱即用。
2,单机应用或小型局域网应用,利用强大的html作表示层,用户体验不比传统的MFC,windowFrom差,开发效率,界面美观。
3,。。。
//if($!=jQuery){
$=jQuery.noConflict();
}
varisLogined=false;
varcb_blogId=77898;
varcb_entryId=2184988;
varcb_blogApp="sweethome";
varcb_blogUserGuid="7dc5ede0-87dd-df11-ac81-842b2b196315";
varcb_entryCreatedDate='2011/9/2213:13:00';
//]]>
分类: