我经常用ASP.NET来写一些小程序,写起来方便,但是要部署到客户的机器上,就成了麻烦事,客户的机器上不一定有IIS,并且用户不一定愿意安装那个东西,
所以这里我们要脱离IIS执行ASP.NET,就用到这们这里的cassini服务器,
为了测试他的可用性,我先在IIS下边做一个示例工程:C:/Inetpub/wwwroot/Casi
里边包含了,一个读取数据库返回DataSet的WebForm,和一个读取数据库返回DataSet的Service1.asmx
在IIS上测试没有问题,
接下来,测试Cassini
首先从asp.net上下载cassini的源代码,里边有编译好的exe程序,运行产生错误.
错误的内容:"cassini managed web server failed to start listening on port 8080.possible conflict with another web server on the same port"
发现这个错误后,我换了好几个不可能被占用的端口,都是相同一的错误,我感到非常奇怪,
找一个非常简单的端口扫描程序,检测了一下端口,发现我测试的端口,都是没有被占用的.
基于.net2.0 简单端口测试程序.
http://dl2.csdn.net/down4/20070627/27113631782.exe
直到找这篇文章.
http://blog.csdn.net/shanhe/archive/2004/11/10/176422.aspx
里边详细的说明的错误的原因,
我在这里复制一一下:)
我将所有的源代码拷贝到我的一个新建的工程里边,找到出错的地方,
try {
_server = new Cassini.Server(portNumber, _virtRoot, _appPath);
_server.Start();
}
catch {
ShowError(
"Cassini Managed Web Server failed to start listening on port " + portNumber + ". " +
"Possible conflict with another Web Server on the same port.");
portTextBox.SelectAll();
portTextBox.Focus();
return;
}
注释掉try catch,找到源代码,发现是server.cs文件里的CreateHost()这个函数
System.Type _hosttype=typeof(Host);
object o=ApplicationHost.CreateApplicationHost( _hosttype,_virtualPath, _physicalPath);
if(o ==null){throw new Exception("不能创建Application Host object");}
_host =o as Host;
if(_host ==null){
throw new Exception("转换失败,请检查黯转换类型");
}
将函数代码改成这样,发现错误在:
object o=ApplicationHost.CreateApplicationHost( _hosttype,_virtualPath, _physicalPath);
经shanhe的专栏中的提示后,悄然大悟
将编译成的cxyCassini.exe拷贝到C:/Inetpub/wwwroot/Casi/bin下,运行 exe文件,
写好端口:8080
填上路径,C:/Inetpub/wwwroot/Casi开始运行,
大功告成.呵呵