Documente Academic
Documente Profesional
Documente Cultură
2011
andre.lopes@studentpartners.com.br
Iniciativa .NET
2002 Servios Web Baseados em XML
.Net Framework
1996 1998 Internet Internet 1 Gerao 2 Gerao 1992 Cliente/Servidor Win32 IE/IIS WinDNA
andre.lopes@studentpartners.com.br
Iniciativa .NET
Web Service
Aplicao programvel, acessada como um componente via protocolos Web padres Um consumidor do Web Service pode ser qualquer dispositivo Protocolos abertos de internet
Descrio dos Servios
Aplicao Cliente
Documento WSDL
Resposta
Invoca o Servio
Web Service
andre.lopes@studentpartners.com.br
Iniciativa .NET
Web Service - Benefcios
Escolha entre fazer ou comprar
Minimiza tempo de desenvolvimento e custo
andre.lopes@studentpartners.com.br
Iniciativa .NET
.Net um framework para desenvolvimento de aplicaes baseadas em janelas e internet Coleo de tecnologias (Web Pages, Web Services, WPF, WCF, ...) Independente de SO (IL)
andre.lopes@studentpartners.com.br
Iniciativa .NET
ModuloA.cs ModuloB.vb
Representao Intermdia
ModuloA.dll
ModuloB.dll
Windows XP
Windows CE
Portabilidade
andre.lopes@studentpartners.com.br
Iniciativa .NET
Web Services XML Web Forms
andre.lopes@studentpartners.com.br
Iniciativa .NET
Normalizao\Padronizao
ECMA 335 ISO/IEC 23271:2003 SSCLI
andre.lopes@studentpartners.com.br
Conceitos Importantes
CLR IL
Metadados PE Assembly
andre.lopes@studentpartners.com.br
Provedor de recursos
Tratamento de Erros Threads Excees andre.lopes@studentpartners.com.br
Classes Fundamentais
Gerenciador de Cdigo
Carregador de Classes
andre.lopes@studentpartners.com.br
Coletor de Lixo
Win 32/64 SO
andre.lopes@studentpartners.com.br
Demonstrao
Classes
andre.lopes@studentpartners.com.br
Intermediate Language
Nvel intermedirio
Manipula Arrays diretamente Manipula objetos e seus mtodos No existe conceito de registrador
ilasm.exe
ildasm.exe Dispe de TODOS os recursos do CLR
andre.lopes@studentpartners.com.br
Intermediate Language
Hello.il
.assembly extern mscorlib {} .assembly HelloWord { .ver 1:0:1:1 } .module HelloWord.exe .method static void Main() cil managed { .maxstack 1 .entrypoint ldstr Hello World call void [mscorlib]System.Console::WriteLine(string) ret
} andre.lopes@studentpartners.com.br
Intermediate Language
Para compilar um cdigo em IL
andre.lopes@studentpartners.com.br
Metadata
Informao sobre os tipos, vinculados a um EXE ou DLL
Conjunto de tabelas de dados que descrevem o que est definido no mdulo, seus tipos e membros Conjunto de tabelas que descrevem oque esta sendo usado pelo mdulo - tipo externos, importados.
Pessoa.dll Membro
Nome
Tipo
string
Acesso
publico
Tipo
string
Assembly
mscorlib.dll
DataNasc
Idade ...
DateTime
Int32 ...
privado
publico ...
DateTime
Int32 ...
System.dll
mscorlib.dll ...
andre.lopes@studentpartners.com.br
Metadata
Utilidades
Eliminam a necessidade de arquivos de cabealho
andre.lopes@studentpartners.com.br
Metadata
Obtendo metadados com C#
using System; using System.Reflection;
static void Main(string[] args) { Assembly mscorlib = Assembly.Load(mscorlib.dll); foreach(Type tipo in mscorlib.GetTypes()) { Console.WriteLine(tipo.Name); foreach(MemberInfo membro in tipo.GetMembers()) { Console.WriteLine(membro.Name); } } }
andre.lopes@studentpartners.com.br
PE
Portable Executable
Portvel no est vinculado a nenhum sistema especfico, embora seja somente usado no Windows
Dividido em sees
- Cdigo - Dados - Importao - Recursos - Exportao - etc
andre.lopes@studentpartners.com.br
PE
Partes de um mdulo gerenciado
Parte Cabealho PE Descrio Identifica se um arquivo CUI, GUI ou DLL. Tem tambm a Data/Hora de Criao Contm informaes (interpretadas pelo CLR e por utilitrios) que fazem dele um mdulo gerenciado Tabelas de metadados. Tabelas de tipos definidos e Tabelas de tipos referenciados. Cdigo que o compilador produziu quando compilou o cdigo fonte.
Cabealho CLR
Metadados
Cdigo em IL
andre.lopes@studentpartners.com.br
Assembly
Agrupamento lgico de um ou mais mdulos gerenciados ou arquivos de recursos
andre.lopes@studentpartners.com.br
Assembly
Mdulo gerenciado (IL e metadados) Mdulo gerenciado (IL e metadados)
. . . Arquivos de recursos (jpeg, .gif, .html, etc) Assembly Ferramenta que combina mltiplos mdulos gerenciados e arquivos de recursos em um assembly Compilador C# (csc.exe) Compilado VB (vbc.exe) Assembly Linker (al.exe)
andre.lopes@studentpartners.com.br
Funcionamento
Compilao Carregamento
Execuo
andre.lopes@studentpartners.com.br
Compilao
Arquivo de Cdigo Fonte C# Arquivo de Cdigo Fonte VB Arquivo de Cdigo Fonte J#
Compilador C#
Compilador VB
Compilador J#
Metadata IL
Recursos Arquivo PE
andre.lopes@studentpartners.com.br
Compilao
MSCorEE.dll Uma referncia feita na seo .idata do arquivo para MSCorEE.dll
O Compilador automaticamente insere uma chamada para funo _CorExeMain, na seo .text, para o CLR ser inicializado quando executarmos o assembly
andre.lopes@studentpartners.com.br
Carregamento
Passos, arquivo exe
1. O arquivo .exe chamado
2. O Windows carrega o arquivo normalmente, como um no gerenciado. 3. Ao encontrar a chamada para MSCorEE.dll, a funo _CorExeMain chama o CLR 4. Caso o CLR j esteja em execuo ( alguma outra
aplicao gerenciada j est aberta ) o processo atual adicionado ao CLR, caso contrrio o CLR iniciado 5. O CLR toma conta do processo daqui em diante 6. O CLR localiza o ponto de entrada da aplicao mtodo
Main e inicia sua execuo. andre.lopes@studentpartners.com.br
Carregamento
A thread primria do Processo inicializada EXE gerenciado Cabealho PE
Seo .text Seo .idata
JMP _CorExeMain
Espao de endereamento
EXE gerenciado
O MSCorEE examina o cabealho CLR para obter o token de metadados do mtodo Main. O MSCorEE examina os metadados de Main para obter a localizao da IL dentro do arquivo EXE. O MSCorEE compila a IL de Main para cdigo nativo de CPU. O MSCorEE desvia para o cdigo nativo de CPU de Main ( utilizando a thread principal ) a aplicao executada.
andre.lopes@studentpartners.com.br
Carregamento
Passos, arquivo dll
andre.lopes@studentpartners.com.br
Execuo
1. Verificao de tipo
2.
cada tipo. 3. 4. 5. JITCompiler pega a IL do mtodo com base nos JITCompiler compila a instruo para cdigo ntivo de JITCompiler grava a instruo em um endereo de
andre.lopes@studentpartners.com.br
Execuo
6. JITCompiler retorna o endereo para o CLR, que substitui o endereo fictcio criado no passo 2.
7. CLR manda executar o cdigo que est na rea de
9.
CLR verifica se a instruo j foi compilada pelo JIT 9-1. 9-2. Caso tenha sido, volta para 7. Caso no tenha sido, volta para - JITCompiler.
andre.lopes@studentpartners.com.br
Execuo
EXE gerenciado
static void Main(){ Console.WriteLine(Ol); Console.WriteLine(Tchau); }
Console
JITCompiler
MSCorEE.dll 1. No Assembly que implementa o tipo (Console), procure nos metadados o mtodo (WriteLine) que est sendo chamado. 2. A partir dos metadados, obtenha o cdigo IL para esse mtodo 3. Aloque um bloco de memria 4. Compile a IL em instrues nativas de CPU; 5. Modifique a entrada do mtodo na tabela, de modo que agora ele aponte para o bloco de memria alocado em 3 6. Desvie para o cdigo nativo contido no bloco de memria
andre.lopes@studentpartners.com.br
Execuo
EXE gerenciado
static void Main(){ Console.WriteLine(Ol); Console.WriteLine(Tchau); }
Console
JITCompiler
MSCorEE.dll
1. No Assembly que implementa o tipo (Console), procure nos metadados o mtodo (WriteLine) que est sendo chamado. 2. A partir dos metadados, obtenha o cdigo IL para esse mtodo 3. Aloque um bloco de memria 4. Compile a IL em instrues nativas de CPU; o cdigo nativo salvo no bloco alocado em 3 5. Modifique a entrada do mtodo na tabela, de modo que agora ele aponte para o bloco de memria alocado em 3 6. Desvie para o cdigo nativo contido no bloco de memria
andre.lopes@studentpartners.com.br
Execuo
Perca de desempenho com o JITCompiler
Cdigo nativo gerado para uma arquitetura especfica, processado onde o cdigo est sendo executado
Se for um Pentium 4, por exemplo, o JIT vai poder usar recursos especficos dessa arquitetura
Otimizao de cdigo
If(numeroDeCPUs > 1) { }
Em um computador com somente uma CPU o cdigo acima no sria nem compilado
andre.lopes@studentpartners.com.br
Solicitaes ASP.NET
Servidor IIS
andre.lopes@studentpartners.com.br
Solicitaes ASP.NET
Aps a solicitao chegar no servidor IIS ela mapeada, dependendo do seu tipo aspx asmx asax etc
andre.lopes@studentpartners.com.br
Solicitaes ASP.NET
A dll ISAPI compila a pgina solicitada e devolve o resultado para o IIS Por sua vez o IIS retorna o cdigo HTML para o browser
Do mesmo modo que o CLR compila dlls e exes a dll ISAPI faz com as pginas aspx
Caso a mesma pgina seja chamada novamente, a compilao no acontece, no ASP clssico isso acontecia
andre.lopes@studentpartners.com.br
Interoperabilidade
Linguagens diferentes
C# case sensitive VB case insensitive C# tem inteiro sem sinal VB no tem inteiro sem sinal etc
Para linguagens diferentes poderem interoperar s podem ser usados os recursos comuns CLS
andre.lopes@studentpartners.com.br
Interoperabilidade
CLR\CTS
C#
CLS
VB
Fortran
andre.lopes@studentpartners.com.br
Interoperabilidade
[assembly: CLSCompliant(true)]
public class Pessoa { public Pessoa() { } public UInt32 Idade {get; set;} public string Nome {get; set;} private UInt64 ObtemClassificacao(){ return 1; } public void Verifica() { } public void verifica() { } }
andre.lopes@studentpartners.com.br
Interoperabilidade
[assembly: ComVisible(true)] Exporta a biblioteca em um formato COM
VB MSAccess (VBA) Qualquer outra linguagem no gerenciada que suporte COM
andre.lopes@studentpartners.com.br
The End
andre.lopes@studentpartners.com.br