Desenvolvendo Asp.NET para LinuxAlessandro de Oliveira BinharaMsc em Gestão de Projetos ComplexosProjeto Mono [email protected]
21/01/2010
Agenda
− Projeto Mono− Portando Aplicativos− Mono e ASP.NET− Progrando ASP.NET no Mono− Criando uma aplicação− Cases de Sucesso
3
Nascimento do Mono
− Criado por Miguel de Icaza em 2001− Mono é uma implementação OpenSource do .NET
Permite a execução e desenvolvimento de software .Net em ambiente Não Windows.
− Criou o Gnome e a empresa Ximian para dar suporte ao gnome.
Miguel recebeu este ano o título da Microsoft de MVP C#
− Evolution- cliente de email− 17 desenvolvedores, 2 anos e meio, muito caro− Um problema do linux era ter boas ferramentas− Necessidade da criação de uma comunidade
4
Estado AtualMono 2.6Lançado dia 15/12/2009 − MonoDevelop 2.2
− Mudou a licença para LGPL e MIT. Melhorias na interface, suporte Asp.NET MVC, Moonligth Suporte, suporte Windows e MACOSX, novos refactoring , suporte Iphone,
− WCF client e servidor, um subset exposto pelo by Silverlight 2.0.
− LLVM support, to improve performance on server/computational loads.
− LINQ para SQL usando o DbLinq.− Novo debuger integrado com o MonoDevelop e com o OSX.− csharp shell agora suporta auto-completion− 3.5 API agora está mais completa− C# 3.0 (repositório já está com C# 4.0)− MoonLigth 2.0 -> WEBCAST AMANHÃ !!!!− Esta versão esta integrando Microsoft's open sourced
− ASP.NET MVC, ASP.NET AJAX and Microsoft's Dynamic Language Runtime.
6
Plataformas Supported Architectures Runtime Operating system
s390, s390x (32 and 64 bits)
JIT Linux
SPARC (32) JIT Solaris, Linux
PowerPC JIT Linux, Mac OSX, Wii, PlayStation 3
x86 JIT Linux, FreeBSD, OpenBSD, NetBSD, Microsoft Windows, Solaris, OS X
x86-64: AMD64 and EM64T (64 bit)
JIT Linux, Solaris
IA64 Itanium2 (64 bit) JIT Linux
ARM: little and big endian JIT Linux (both old and new ABI), iPhone
Alpha JIT Linux
MIPS JIT Linux
HPPA JIT Linux
7
Documentação
− Site intenacional :− www.mono-project.com
− MonkeyGuide :− http://mono-project.com/Monkeyguide
− Mono APIs : − http://www.go-mono.com/docs/
− Projeto Mono Brasil− http://www.monobrasil.org− Esforço de tradução do Mono Brasil
Crie no VS e rode no Linux
− Compatibilidade Binária− Monte o disco do linux e copie seus
binários no linux− Compartilhe no windows e acesso no
linux− Testando
− Uso de máquinas virtuas: Ex: Virtual PC− Donwload das VM e LiveCD no site do
mono
10
Sistema de arquivos− Cuidado com os caminhos− Cuidado com letras Maiúsculas e minúsculas
Busca manual de Separadoresint index = exePath.LastIndexOf("\\"); exeDir = exePath.Substring(0, index); exeFile = exePath.Substring(index+1);
Código mais portávelexeDir = Path.GetDirectoryName (exePath); exeFile = Path.GetFileName (exePath);
11
Variáveis de Ambiente
− Variáveis de ambiente o o PATH no Windows usa “;” o linux e outros sistemas unix usam “:”
− Você pode usar System.IO.Path.PathSeparator para separa o path nas variáveis de ambiente
Console.WriteLine ( "Subdiretorios encontrados no PATH :“ ); string path_env = Environment.GetEnvironmentVariable ( "PATH“ ); string[] path_dirs = path_env.Split (Path.PathSeparator); foreach (string pathdir in path_dirs)
Console.WriteLine(pathdir);
12
Caminhos absolutos
− Não use caminhos absolutos, eles não vão funcionar em outros sistemas.
− Use algum mecanismo como um arquivo de configurção para localizar seus arquivos e caminhos
13
P/Invoque
− Chamadas a DLLs nativas a API Windows não irão funcionar em outros sistemas, pois a API não está la.
− Caso você dependa de bibliotecas em C, você deverá substituir por equivalentes no ambiente Linux.
− Sua aplicação deverá identificar o sistema que está rodando e chavear entre as bibliotecas.
15
Banco de Dados
- Mono faz acesso ao SQLServer , não existe necessidade de mudar de banco para rodar sua aplicação no linux.
- Mono Disponibiliza os dataproviders para os bancos : MySQL, Postgresql, Oracle, DB2, SyBase
- É possivel usar os dataproviders do mono no .NET com VS para acessar os bancos livres.
16
Não é Suportado no Mono
− Sem suporte a Enterprise Services− Sem suporte a cross-process trasaction
− Mono so suporta trasações locais
− Não tem suporte a COM− Com não existe em Sistema UNIX− Existe um projeto para suportar isso http://www.mono-
project.com/COM_Interop
17
Portando ASP.NET
− Diferenças nos nomes de arquivos :− Arquivo:Login.aspx Referência: login.aspx
− Exemplo completo de porte de um Blog− Requisitos, sistema de arquivos, arquivos de configuração, variáveis de
ambientes− Configuração de conexão com o banco, nome de arquivos− http://www.mono-project.com/
Guide:_Porting_ASP.NET_Applications
ASP.NET no Mono
− Suporte ASP.NET 1.1 e 2.0 − Suporte WEBForms e WEBServices− Suporte a Debug e Debug Remoto− Suporte a ASP.NET Ajax e controle .NET 3.5
− Anthem.NET, magicajax.net, Gaia Ajax for ASP.NET− Suporte a ASP.NET MVC− Suporte Completo a C# e VB.NET− Suporte a outras liguagens com F# em binários− Suporte a Code Behind
20
Restrições do Mono
− Problemas com WebParts− WebParts API− Não suporta ASP− Não suporta “WebService Enchacements”− Não suportar websites pré compilados atualizáveis− Sem suporte a mod_mono no apache com windows
21
MOD_Mono
− Módulo do mono para o APACHE− Instalação por pacotes disponível na maioria das
distribuições: SUSE, Ubuntu, Debian− Recomendado para ambientes de produção− O mod_mono vai automaticamente carregar o
mod-mono-Server para iniciar o sua aplicação web− Pode-se usar a opção AutoConfiguration
Inclua no apache Include /etc/apache2/mod_mono.conf ou
Carregar via módulo no apacheLoadModule mono_module /usr/lib/httpd/modules/mod_mono.so
22
AutoConfiguration− No passado era preciso fazer um série de configurações para
fazer o Mono funcionar no apache− É um mecanismo para minimizar a quantidade de
configurações− Basta copiar os arquivos para os diretórios expostos do
Apache (ex: htdocs)
ApacheMonoServerPath "/usr/bin/mod-mono-server2“MonoAutoApplication enabled<httpHandlers> <add verb="*" path="*.m" type="Maverick.Dispatcher, Maverick" /> </httpHandlers>
mod_mono.confAddType application/x-asp-net .m
23
Deploy
Copie seu site para o servidor e descompacte $ cd /var/www/ $ unzip CommunityServer.zip Você vai acessá-lo em http://localhost/CommunityServer/
http://www.mono-project.com/ASP.NEThttp://www.mono-project.com/Mod_monohttp://www.mono-project.com/AutoHostingInstruções para o Ubuntuhttps://help.ubuntu.com/community/ModMono
24
XSP− É um servidor utilizado para desenvolvimento− Escrito em C#− Roda tanto no runtime mono e no .NET− É a maneira mais simples para começar a testar− Tem suporte SSL e TLS− Suporta Debug− Não recomendado para ambientes de produção
$ cd /usr/lib/xsp/test $ xsp Listening on port: 8080 Listening on address: 0.0.0.0 Root directory: /home/cvs/mcs/class/corlib/Microsoft.Win32 Hit Return to stop the server.
25
FASTCGI
− Patrocionado pelo Google no Sumer of Code − Simplifica a configuração − Poder ser usado em vários servidores
− Apache, − Abyss − WebServer, − Cherokee, − LigthHttp, − Nginx
26
Problemas Comuns
− Colocar na pasta"Bin“ ao inves "bin"− Não colocar todas as todas as DLLs requeridas no
diretório bin− Problemas com performance− Falha de compilação, problema de compatibilidade
entre o mcs e o compilador da microsoft− http://
www.mono-project.com/ASP.NET_Mono_Specific_Configuration
27
HOSTING
− Alguns hosting com suporte a Mono com ASP.NET
− http://www.grokthis.net/− http://www.ubiquityhosting.com/
28
LINPLOY
− Tenho um servidor linux com mono + ASP.NET em minutos
− Crie sua imagem no Suse Studio e Faça deploy− http://www.linploy.com
Aplicação Teste
Crie os diretórios$ mkdir asp-net$ cd asp-net/$ mkdir bin
Crie o Arquivo teste1.aspx<html> <head> <title>Teste às ASP .NET no Mono</title> </head> <body> Olá Mundo! </body></html>
31
Rodando a Aplicação no XSP
Para teste execute o xsp no diretório da aplicação
$ xspAdding applications '/:.'...Registering application: Host: any Port: any Virtual path: / Physical path: /home/pre/tmp/asp-netListening on port: 8080Listening on address: 0.0.0.0Root directory: /home/pre/tmp/asp-netHit Return to stop the server.
32
Aplicação Teste 2
Teste2.aspx
<%@ Page Language="c#" Inherits="Mono.Teste2" %><html> <head> <title>Teste II às ASP .NET no Mono</title> </head> <body> <asp:Label id="msg" runat="server" /> </body></html>
33
Arquivo CSharp
Compilando a Aplicação
$ mcs teste2.cs -r:System.Web -t:library -out:bin/teste1.dllCompilation succeeded
Mono C#Compiler
Mono C#Compiler
Tipo
Arquivo de
Saída
41
Case− MojoPortal− http://www.mojoportal.com− http://demo.mojoportal.com/
42
MindTouch− Escrito em C# , OpenSource− Ganhou diversos prêmios− Melhor Wiki da Atualidade− Usuários: NASA, MOZILA, CISCO, PALM, INTEL,
EMC2, Microsoft, U.S. ARM − www.mindtouch www.monobrasil.org
© 2009 Microsoft Corporation. All rights reserved. Microsoft, MSDN, the MSDN logo, and [list other trademarks referenced] are trademarks of the Microsoft group of companies. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond
to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.