一起谈.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)下的部署

目录
相关文章
|
3月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
41 0
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
mvc.net分页查询案例——mvc-paper.css
mvc.net分页查询案例——mvc-paper.css
5 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
3月前
|
XML 前端开发 定位技术
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
C#(NET Core3.1 MVC)生成站点地图(sitemap.xml)
25 0
|
3月前
|
前端开发
.net core mvc获取IP地址和IP所在地(其实是百度的)
.net core mvc获取IP地址和IP所在地(其实是百度的)
124 0
|
存储 .NET Linux
论windows + asp.net性能
windows的扩展和优化的空间的确和linux比是有限的,不过这个有限也是相对的。而且,“有限”并不代表“做不好”,事实上windows + asp.net性能是非常可靠的。Linux的确可以根据业务特性调优到极致,windows能调优到90%,一般也够了。
|
1月前
|
安全 数据安全/隐私保护 Windows
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
解锁安全之门,Windows Server 2019密码修改攻略大揭秘
|
1月前
|
存储 安全 网络安全
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
铁壁如墙-WINDOWS SERVER 2019勒索病毒终极防御指南
|
1月前
|
网络协议 数据安全/隐私保护 Windows
Windows Server 各版本搭建域控制器实现通过域管理用户(03~19)
Windows Server 各版本搭建域控制器实现通过域管理用户(03~19)
45 1