一起谈.NET技术,ASP.NET MVC3 on Mono的折腾(一):Windows下的部署

简介:   Mono 2.10支持MVC3和Razor的消息着实让我兴奋了好一会儿,因为支持MVC3后,我就有可能做Kooboo CMS3兼容Mono的相关测试工作。可是没一会儿,我就发现,离我的目标还是有一点距离。

  Mono 2.10支持MVC3和Razor的消息着实让我兴奋了好一会儿,因为支持MVC3后,我就有可能做Kooboo CMS3兼容Mono的相关测试工作。可是没一会儿,我就发现,离我的目标还是有一点距离。不晓得是Mono 2.10本身存在的bug,还是我的原因,我总是无法很完美的在Mono运行起MVC3的站点,即使是用默认的MVC3站点模板创建的非常简单的站点也是一样。长期生活在微软Windows/.NET平台的滋润环境中,没有Linux平台的使用经验和基于配置文件的Web部署习惯,让我花了不少的时间来解决原本很简单的问题的。从使用XSP失败,到折腾Windows下使用Nginx+FastCGI来Host ASP.NET MVC3站点,之后再花了半个周末如痴如醉的研究openSUSE下的Mono部署。虽然没有解决MVC3的运行问题,但是总算还是搞清楚了如何在Mono部署ASP.NET站点,以及简单的linux平台(openSUSE)操作。下面就简单的记录一下这些艰难历程:

  环境准备

  在VS2010,用默认的MVC3站点模板创建一个简单MVC站点,有简单的首页和登录页面,并且在Bin下面要私有部署MVC3的相关依赖程序集除了Microsoft.Web.Infrastructure.dll。站点下载

  1.使用Mono 2.10的XSP服务器失败

  Mono支持跨平台,当然包括Windows平台,而且在Windows平台下面,它也提供了一种非常简单的方式来让我们方便的通过Mono启动Web站点,就这是XSP。在Mono安装成功之后,它会在目录的右键菜单中增加一个菜单项“XSP 2 Web Server Here 2.10”,而我们只需要简单的选择这个菜单项就可以将目录作为Web站点用Mono运行起来。而这里的XSP2,表示,我们使用的是ASP.NET 2.0,如果你需要用ASP.NET 4.0,那你可以通过修改注册表的方式再增加一个类似的菜单项,只是把执行的批处理由xsp2.bat改为xsp4.bat就行了。这原本是最为简单的测试方案,而且我使用Mono2.8来启动MVC2站点也是没有任何问题。结果在Mono 2.10中,XSP的站点死活就是不响应,那个请求让他运行一万年,它也是在那边loading,也不timeout。问题通过各种努力,最终无力解决。

  2.在Windows平台下使用Nginx+FastCGI-mono-server架起MVC3站点,但是表单提交后,ModelBinder无法正常绑定Action Model.

  XSP行不通,只能想其它办法。在尝试了在Windows使用Apache失败之后,选择了Nginx+FastCGI来架构ASP.NET站点。在园子里面找到这篇介绍在Mono架设ASP.NET站点,不过根据这篇文章我始终没有搞明白具体如何配置,好像很复杂的样子,还要下载它提供的文件,尝试无果。幸好在Mono的官方站点找到Nginx的Mono配置文件,不过是Linux下面的配置。没关系,看那配置也就那几个步骤,应该很简单。期间也遇到过一些问题,不过都顺利解决,下面简单记录一下Nginx+Mono在Windows下部署ASP.NET站点的步骤:

  1)从Nginx 的官方网站下载最新的Nginx软件,纯绿色,无需安装。下载之后,解压到某一目录,这里是:E:\Mono\nginx-0.9.4

  2)为了方便,把你的ASP.NET站点,也拷到Nginx目录下面,我这边使用的目录名称是:Mono_MVC3

  3)进入conf目录下,找到nginx.conf,找到location /{},我们把这段配置改为我们自己的值:

 
 
location / {
root Mono_MVC3;

fastcgi_pass
127.0 . 0.1 : 9000 ;
fastcgi_param SCRIPT_FILENAME $document_root
/ $fastcgi_script_name;
include fastcgi_params;
}

  原本应该是还有一行fastcgi_index Default.aspx,用来设置默认页面; 但因为我这里是Host MVC站点,所以去掉这行配置。如果没有去掉这行,站点的根目录将会无法访问。

  4)部署MVC站点,除了去掉默认首页设置之外,还需要在conf目录下找到fastcgi_params这个文件,在文件最后加上下面两行配置:

 
 
fastcgi_param PATH_INFO "" ;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  5)需要配置的部分都已经结束。下面就可以Mono FastCGI Server,这个命令行稍有差错,就会让我们的站点无法站点,结合了各方资料,我自己可以正常工作的命令行是:

D:\Program Files\Mono-2.10\bin>fastcgi-mono-server4 /socket=tcp:127.0.0.1:9000 /root="E:\Mono\nginx-0.9.4\Mono_MVC3" /applications=/:. /multiplex=True /port=8080

  6)最后一步,运行:nginx.exe。注意,只需要双击运行就可以了,双击就会在后台执行,不用在命令行下面运行。

  以上就是Nginx+Mono在Windows下面最详细的配置步骤了。正常情况下,这时候我们只要访问Http://localhost:8080,站点应该就可以正常工作了。但是,因为Mono 2.10和MVC3,我还是遇到问题了:

  1)每次FastCGI-Mono-Server第一次解析站点,都会出错,只要你刷新一下页面就可以正常访问了。

Nginx-exception  2)当我们重定向到登录页,输入用户名密码之后提交,又会遇到另外一个问题,Action无法被执行:

Nginx-exception2  其实,在我最开始的尝试中(另一台机器),是不会抛出异常的,提交过程正常,但是会提示你没有输入用户名/密码,也就是LogOnModel的属性没有通过ModelBinder正确绑定。我目前也搞不清楚是不是在官方的下载中,提供了不同的编译版本。

  在Windows下的部署,总算是有一个可以成功了,可是仍然还是存在运行不正确的问题。于是把目光投到Linux下面,看看Linux下面的部署会不会正确 ,毕竟Mono的主要部署场景还是在非Windows平台下。

  后续:ASP.NET MVC3 on Mono的折腾(二):Linux(openSUSE)下的部署

目录
相关文章
|
2月前
|
Windows
Windows操作系统部署安装Kerberos客户端
详细介绍了在Windows操作系统上部署安装Kerberos客户端的完整过程,包括下载安装包、安装步骤、自定义安装路径、修改环境变量、配置hosts文件和Kerberos配置文件,以及安装后的验证步骤。
393 3
Windows操作系统部署安装Kerberos客户端
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
43 7
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
63 0
|
3月前
|
开发框架 JavaScript .NET
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
【Azure 应用服务】Azure Mobile App (NodeJS) 的服务端部署在App Service for Windows中出现404 Not Found
|
3月前
|
存储 安全 网络安全
【Azure 环境】使用Azure中的App Service部署Web应用,以Windows为主机系统是否可以启动防病毒,防恶意软件服务呢(Microsoft Antimalware)?
【Azure 环境】使用Azure中的App Service部署Web应用,以Windows为主机系统是否可以启动防病毒,防恶意软件服务呢(Microsoft Antimalware)?
|
3月前
|
Python Windows
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
【Azure 应用服务】App Service For Windows 环境中部署Python站点后,如何继续访问静态资源文件呢(Serving Static Files)?
|
3月前
|
负载均衡 网络协议 安全
【Azure 应用服务】Azure Web App的服务(基于Windows 操作系统部署)在被安全漏洞扫描时发现了TCP timestamps漏洞
【Azure 应用服务】Azure Web App的服务(基于Windows 操作系统部署)在被安全漏洞扫描时发现了TCP timestamps漏洞
|
3月前
|
Python Windows 内存技术
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
【Azure 应用服务】Azure App Service (Windows) 使用Flask框架部署Python应用,如何在代码中访问静态文件呢?如何设置文件路径?是相对路径还是绝对路径呢?
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
49 0
|
3月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?
下一篇
无影云桌面