.NET移植Mono初体验

简介:

序论:关于mono的介绍可以猛击这里了解!如果你因为licence的问题而对mono望而却步,你可以仔细看下这里,之后你就会大胆的去用了!

最近为了练习做了一个简单的三层架构的信息管理系统,除了CRUD操作就是登录和登出。一开始我的想法就很明确,做完了就Porting到mono下运行。

为什么这里会要Porting呢,而不是直接在linux下面借助monodevelop开发。原因很简单,monodevelop相对我们用习惯了的VS05-10里面

的任何一个版本,我们都会觉得.net开发人员如此幸运,有Visual Studio这么方便的IDE。相对VS而言,monodevelop的确比较那啥,用过的都知道!

所以用VS开发,完了放到monodevelop下编译下,然后部署到linux服务器运行是不错的选择。

本文:在移植过程中遇到了三个问题。

1.Response.Redirect()里面的URL的问题。

问题重现:一般为了判断用户是否登录并在用户登录后跳转到之前请求的页面,会在BasePage里面做如下处理:

在Windows里面测试没有任何问题,但是在Ubuntu11.10 运行时问出现如下问题:

在地址栏我直接输入要访问的Main.aspx,跳转回来的地址如图所示:

从登录界面登录会产生如下错误:

在Ubuntu里面,Response.Redirect()里面的URL会多加127.0.0.1:8080,所以报错也很正常。

解决的方法:取backUrl为相对路径,string backUrl=Request.RawUrl;

2.注销/退出时的Session处理问题

注销/退出功能虽然很小,但是扔有许多细节的地方需要注意。在vs开发时,跟大多数同学一样,代码如下:

Session["UserName"]=null;

Session.abandon();

Response.Redirect("登录页面URL");

同样在Windows里面没有任何问题,就是在monodevelop里面编译也是完全通过,运行会报如下错误:

步骤:登录--退出--登录

退出之后再登录会报错:

刚开始对这个错误会不知所错,我一开始以为是monodevelop自带的XSP4的服务器有问题,但是当我部署到

Nginx上运行仍然报同样的错误。仔细看异常信息,可以发现是Session出了问题,所以很快定位可能是登出操作

Session.Abandon()引起的,将Session.Clear()后,一切都好了。关于Session.Abandon()MSDN是这样描述:

一旦调用 Abandon 方法,当前会话不再有效,同时会启动新的会话。 Abandon 导致引发 End 事件。

发送下一次请求后将引发新的 Start 事件。默认条件下,已放弃或过期会话的会话标识符将被回收。

也就是说,如果发送的请求包含了某个已过期或放弃会话的会话标识符,将使用相同的会话标识符启动新的会话。

仅当 Mode 属性被设置为 InProc 时,才引发 End 事件。

猜想这里应该是mono对Session管理的机制和.net不同造成的,至于具体是什么原因,我也不清楚,还请

路过的大牛指导。

3.mono里面的checkboxlist控件是不能保存值的。
这个问题我部署到vps上测试时发现的,在.net里面是没有问题的。但是在mono里面提交时,checkboxlist的值会丢失,所以最后不得不改成多个checkbox。这个应该是mono的一个bug。

以上就是这次我移植到mono平台的一些体验,有什么不准确的地方请大家指正,也希望能给那些和我一样的新手朋友一点帮助!

本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/archive/2011/11/18/mono_2.html如需转载请自行联系原作者


张雪飞

相关文章
|
开发框架 IDE .NET
.NET 6 之 ABP vNext 初体验
本文将介绍在 .net6 平台的 asp.net core webapi 框架中,如何使用 abp vnext 框架进行模块化开发,重在思想理解。
1048 1
.NET 6 之 ABP vNext 初体验
|
开发框架 Java .NET
Mono 现状与未来: 从 Xamarin 到 WebAssembly、Blazor 及.NET 5
  本文要点:   Mono 项目始于 2001 年,是首个面向.NET 应用程序的多平台、开源框架的项目。Xamarin 和 Blazor 分别代表了微软在移动和 Web 应用程序方面的努力,它们都是基于 Mono 并由 Mono 提供支持的。.NET 5 为用户提供了两种运行时选项:高性能的 CoreCLR(用于服务器和桌面应用程序)和轻量级的 Mono(用于移动设备和 WebAssembly)。尽管 Mono 已经是.NET 的一部分了,但仍有一些开发工作要致力于改善 Mono 的运行时性能和垃圾回收器。现在.NET Core 可以与 Mono 并行安装了,因此可以一起演进语言和运行时
1120 0
|
开发框架 负载均衡 前端开发
.NET 6 之 YARP 初体验
YARP —— 又一个反向代理欢迎来到 YARP 的文档!YARP 是一个库,用于帮助创建高性能、可生产且高度可定制的反向代理服务器。现在它仍然在预览中,但是请通过 GitHub 仓库 提供您的反馈。什么是 YARP ? 我们发现微软的一些内部团队要么为他们的服务构建一个反向代理,要么为构建一个代理询问 API 的技术...
711 0
.NET 6 之 YARP 初体验
|
Java API C#
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
600 0
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
|
存储 开发框架 JavaScript
『SignalR』.NET使用 SignalR 进行实时通信初体验
📣读完这篇文章里你能收获到 - 你将对SignalR有了初步的认识及体会 - 对于哪些场景适用SignalR以及如何接入使用 - SignalR的代码入门级Demo实际案例
608 0
『SignalR』.NET使用 SignalR 进行实时通信初体验
|
开发框架 负载均衡 网络协议
.NET WebSocket 核心原理初体验
本文将利用WebSockets(SignalR的一部分)搭建一个可双向通信的ASP.NETCore5应用。
.NET WebSocket 核心原理初体验
|
负载均衡 Cloud Native Java
.NET gRPC核心功能初体验
gRPC是高性能的RPC框架, 有效地用于服务通信(不管是数据中心内部还是跨数据中心)。
.NET gRPC核心功能初体验
|
存储 NoSQL Cloud Native
.NET 5 with Dapr 初体验
分布式应用运行时Dapr目前已经发布了1.1.0版本,阿里云也在积极地为Dapr贡献代码和落地实践。作为一名开发者,自然也想玩一玩,看看Dapr带来的新“视”界到底是怎么样的。
1476 0
.NET 5 with Dapr 初体验
mono,让C#脱离.NET环境
mono,让C#脱离.NET环境
539 0
|
Windows
在Corex-M3开发板上移植.Net Micro Framework系列文章
.NET Micro Framework 将 .NET 的可靠性和效率与 Visual Studio® 的高生产率结合起来,以针对价格较低、资源受限的小型设备开发应用程序,可帮助人们使用熟悉的 Visual Studio 工具来构建托管的嵌入式应用程序。
649 0
下一篇
无影云桌面