首页 > 代码库 > Ubuntu 环境 运行Asp.net mvc +EntityFramework+ Mysql

Ubuntu 环境 运行Asp.net mvc +EntityFramework+ Mysql

 

 

关键词:ubuntu,mono,.Net framework 4.5,asp.net mvc 4,Entityframework 6,Mysql

 

  1. Mono安装

参考文章:

Install Mono on Linux | Mono

http://www.mono-project.com/docs/getting-started/install/linux/

 

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF

echo"deb http://download.mono-project.com/repo/debian wheezy main" | sudo tee /etc/apt/sources.list.d/mono-xamarin.list

 

 

sudo apt-get install mono-complete

mono -V

技术分享

mono运行时环境安装成功。

 

  1. Jexus 

Jexus V5.5.3 使用问答- Linux DotNET程序员大本营

http://www.linuxdot.net/bbsfile-3500

 

  1. 安装

sudo wget http://www.linuxdot.net/down/jexus-5.6.3.tar.gz

sudo tar -zxvf jexus-5.6.3.tar.gz

cd jexus-5.6.3

sudo ./install

 

  1. 启动服务

启动:sudo /usr/jexus/jws start
停止:sudo /usr/jexus/jws stop
重启:sudo /usr/jexus/jws restart
重启指定网站:sudo /usr/jexus/jws restart siteName
停止指定网站:sudo /usr/jexus/jws stop siteName

首先得建"网站配置文件",在/usr/jexus/siteconf中的每一个文件都是一个网站的配置文件,每一个配置文件就代表一个网站。

  1. 安装

jexus后,在/usr/jexus/site配置

ocnf中,就已经有一个默认的网站配置文件,文件名叫"default"。

你可以修改这个配置文件,也可以将这个配置文件复制并修改为一个新站。

配置文件中,有关键的三项是必填项:

port:端口号定义

root:虚拟根路径和物理根路径的定义

hosts:域名定义

 

端口号(port)是一个整数,一般是80,也可以是65535以下的其它整数,但这个端口号必须没有其它服务程序占用。

根路径(root)由两部分组成,中间用空格分开。空格前表示这个网站访问时的虚拟根路径(一般都是"/"),空格后是存放这个网站内容的文件夹的物理路径(比如"/var/www/default")。

域名(hosts),填写访问这个网站的域名,如果有多个域名,域名间就英文逗号分开,同时还可以用"泛域名",比如"*.mysite.com"。

网站名:jexus把网站配置文件的名称,作为网站名。

** 强调,网站配置文件名,不能有空格,第一个字符不能是"~"。

 

用 sudo /usr/jexus/jws restart,即可生效。
当然,更可以用 sudo /usr/jexus/jws restart siteName格式,指定需重启的网站。

 

  1. 测试

在/var/www/default文件件新建default.html.

在浏览器输入:

http://{server ip}/default.html

正常显示,就表示web服务器安装成功。

  1. Mysql

    1. 安装

sudo apt-get install mysql-server mysql-client

  1. 启动服务

sudo start mysql

#手动的话这样启动

  1. 创建测试数据库

Create database demo

GO

CREATE TABLE `User` (

`UserId` int(11) NOT NULL AUTO_INCREMENT,

`UserName` varchar(20) DEFAULT NULL,

`Password` varchar(50) DEFAULT NULL,

`Email` varchar(20) DEFAULT NULL,

`Birthday` datetime DEFAULT NULL,

PRIMARY KEY (`UserId`)

) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1

GO

  1. Asp.net mvc

    1. 环境

Vs.net 2013

Asp.net mvc 4(注意,其他版本没测试,貌似mvc4比较稳定,后期测试)

EntityFramework 6

Mysql 6

  1. 新建工程

技术分享

如果使用vs.net 默认模板,建议选择asp.net mvc 4模板,也可以建空网站使用nuget 自己添加dll。

.Net framework 选择4.5.

  1. 发布测试默认站点

使用WinScp上传至默认站点。

注意:删除Microsoft.Web.Infrastructure.dll,System.Net.Http.Formatting.dll

重新打开:http://{serverip}/

能正常运行恭喜,你运气不错。

错误排查,一般mono出错,大部分问题处在dll上,mono没有实现或者有另外的实现,需要替换为mono的dll。

 

例如,以下问题:

System.InvalidProgramException

 

Invalid IL code in System.Net.Http.Headers.MediaTypeHeaderValue:.ctor (string): method body is empty.

 

Description: HTTP 500.Error processing request.

Details: Non-web exception. Exception origin (name of application or object): System.Net.Http.Formatting.

Exception stack trace:

at System.Net.Http.Formatting.MediaTypeConstants..cctor () [0x00000] in <filename unknown>:0

Version Information: 3.2.3 ((no/8d3b4b7 Tue Sep 23 14:47:41 IST 2014); ASP.NET Version: 4.0.30319.17020

 

据错误提示就知System.Net.Http.Formatting.dll有问题

  1. 检查bin目录是否缺少dll
  2. Ubuntu中执行find / | grep System.Net.Http.Formatting.dll

技术分享

 

在mono中已经有此实现,直接删除。

 

遇到问题就根据这种方式排查,可以解决绝大部分问题。

  1. 安装Mysql connect

http://cdn.mysql.com/Downloads/MySQLInstaller/mysql-installer-web-community-5.6.22.0.msi

  1. Nuget 安装EntityFramework 6

Install-Package EntityFramework

技术分享

在命令行中输入。

  1. Nuget 安装Mysql Entity

Install-Package MySql.Data.Entity

技术分享

 

安装完成后,引用里面会出现Mysql程序及,web.config会出现EntityFramework的Mysql驱动。

技术分享

  1. 新建EntityFramework连接

技术分享

技术分享

EntityFramework自动生成Mysql连接。

技术分享

 

完整web.config参考如下:

<?xml version="1.0"?>

<!--

有关如何配置 ASP.NET 应用程序的详细信息,请访问

http://go.microsoft.com/fwlink/?LinkId=152368

-->

<configuration>

<configSections>

<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>

</configSections>

<connectionStrings>

<add name="DataEntities" connectionString="metadata=res://*/Models.DataModel.csdl|res://*/Models.DataModel.ssdl|res://*/Models.DataModel.msl;provider=MySql.Data.MySqlClient;provider connection string=&quot;server=192.168.10.X;user id=XX;password=XX;persistsecurityinfo=True;database=demo&quot;" providerName="System.Data.EntityClient"/>

</connectionStrings>

<appSettings>

<add key="webpages:Version" value="2.0.0.0"/>

<add key="webpages:Enabled" value="false"/>

<add key="PreserveLoginUrl" value="true"/>

<add key="ClientValidationEnabled" value="true"/>

<add key="UnobtrusiveJavaScriptEnabled" value="true"/>

</appSettings>

<!--

有关 web.config 更改的说明,请参见 http://go.microsoft.com/fwlink/?LinkId=235367。

 

可在 <httpRuntime> 标记上设置以下特性。

<system.Web>

<httpRuntime targetFramework="4.5" />

</system.Web>

-->

<system.web>

<customErrors mode="Off"/>

<httpRuntime targetFramework="4.5" />

<compilation debug="true" targetFramework="4.5"/>

<!--<authentication mode="Forms">

<forms loginUrl="~/Account/Login" timeout="2880" />

</authentication>-->

<pages controlRenderingCompatibilityVersion="4.0">

<namespaces>

<add namespace="System.Web.Helpers"/>

<add namespace="System.Web.Mvc"/>

<add namespace="System.Web.Mvc.Ajax"/>

<add namespace="System.Web.Mvc.Html"/>

<add namespace="System.Web.Optimization"/>

<add namespace="System.Web.Routing"/>

<add namespace="System.Web.WebPages"/>

</namespaces>

</pages>

<!--

If you are deploying to a cloud environment that has multiple web server instances,

you should change session state mode from "InProc" to "Custom". In addition,

change the connection string named "DefaultConnection" to connect to an instance

of SQL Server (including SQL Azure and SQL Compact) instead of to SQL Server Express.

-->

</system.web>

<system.webServer>

<validation validateIntegratedModeConfiguration="false"/>

<modules runAllManagedModulesForAllRequests="true"/>

<handlers>

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>

<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>

<remove name="ExtensionlessUrlHandler-Integrated-4.0"/>

<add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>

<add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>

<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>

</handlers>

</system.webServer>

<runtime>

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

<dependentAssembly>

<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35"/>

<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>

<bindingRedirect oldVersion="1.0.0.0-4.0.0.0"newVersion="4.0.0.0"/>

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35"/>

<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0"/>

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35"/>

<bindingRedirect oldVersion="0.0.0.0-1.3.0.0" newVersion="1.3.0.0"/>

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>

<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0"/>

</dependentAssembly>

<dependentAssembly>

<assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral"/>

<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>

</dependentAssembly>

</assemblyBinding>

</runtime>

<system.data>

<DbProviderFactories>

<remove invariant="MySql.Data.MySqlClient"/>

<add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlClientFactory, MySql.Data, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>

</DbProviderFactories>

</system.data>

<entityFramework>

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">

<parameters>

<parameter value="v11.0"/>

</parameters>

</defaultConnectionFactory>

<providers>

<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>

<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.5.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"/>

</providers>

</entityFramework>

</configuration>

 

注意黄色背景的配置。

  1. 新建Mysql测试代码

直接在Index中对Mysql进行数据保存。

public ActionResult Index()

{

//todo test

UserServices.Save(new User()

{

UserName = "admin",

Password = Guid.NewGuid().ToString(),

Email = "ss@ss.com",

Birthday = DateTime.Now

 

});

return View();

}

 

 

public static void Save(User user)

{

using (var provider = new DataEntities())

{

provider.User.Add(user);

provider.SaveChanges();

}

}

  1. 使用Vs。net 发布

参考4.3章节排除问题。

运行成功。

技术分享

 

技术分享

  1. FAQ

    1. 问题排除

find / | grep System.Net.Http.Formatting.dll

  1. 参考bin程序集清单

技术分享

 

技术分享

Ubuntu 环境 运行Asp.net mvc +EntityFramework+ Mysql