a plataforma.net vitor santos microsoft corporation
TRANSCRIPT
A Plataforma .NETA Plataforma .NET
Vitor SantosVitor SantosMicrosoft CorporationMicrosoft Corporation
2
AgendaAgenda
Web Services e Smart DevicesWeb Services e Smart DevicesA Plataforma .NETA Plataforma .NETO Modelo de programaçãoO Modelo de programaçãoSumárioSumário
3
AgendaAgenda
Web ServicesWeb Services e Smart Devicese Smart DevicesA Plataforma .NETA Plataforma .NETO Modelo de programaçãoO Modelo de programaçãoSumárioSumário
4
Empresa AEmpresa A
A empresa “Virtual” A empresa “Virtual”
Escrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
Empregados no ExteriorEmpregados no Exterior
Empresa BEmpresa B
ClientesClientesParceirosParceiros
Fornecedores Fornecedores
Escrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
Empregados no ExteriorEmpregados no Exterior
Exigencia de negócio = Estar tudo ligadoExigencia de negócio = Estar tudo ligado
5
Empresa AEmpresa A
Escrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
Empregados no Empregados no ExteriorExterior
Exigencia de negócio = tudo ligadoExigencia de negócio = tudo ligado
Empresa BEmpresa BEscrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
ClientesClientesParceirosParceiros
FornecedoresFornecedores
Empregados no Empregados no ExteriorExterior
Empresa FEmpresa FEscrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
ClientesClientesParceirosParceiros
FornecedoresFornecedores
Empregados no Empregados no ExteriorExterior
Empresa EEmpresa EEscrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
ClientesClientesParceirosParceiros
FornecedoresFornecedores
Empregados no Empregados no ExteriorExterior
Company CCompany CEscrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
ClientesClientesParceirosParceiros
FornecedoresFornecedores
Empregados no Empregados no ExteriorExterior
Empresa DEmpresa DEscrit.Remoto/ConsumidoresEscrit.Remoto/Consumidores
ClientesClientesParceirosParceiros
FornecedoresFornecedores
Empregados no Empregados no ExteriorExterior
6
A IntegraçãoA Integração Problema clássicoProblema clássico
Costuma ficar para o fimCostuma ficar para o fim Demasiado difícil, cara, lenta e frágilDemasiado difícil, cara, lenta e frágil Ilhas de tecnologia no mar da Ilhas de tecnologia no mar da
conectividadeconectividade As soluções estão a evoluir para As soluções estão a evoluir para
constelaçõesconstelações ExemplosExemplos
Dentro das empresasDentro das empresas Entre empresasEntre empresas O indivíduo e diferentes tecnologiasO indivíduo e diferentes tecnologias
7
Web ServicesWeb Services ConceptualmenteConceptualmente““Pequenos componentes de Pequenos componentes de
funcionalidade funcionalidade disponibilizadas para poderem disponibilizadas para poderem ser consumidos como serviços ser consumidos como serviços através de uma rede”através de uma rede”
TecnicamenteTecnicamente““Conjunto de operações Conjunto de operações
acessíveis através deacessíveis através de mensagensmensagens “ “standard” sobre standard” sobre uma redeuma rede
8
DemoDemo
9
Novos dispositivosNovos dispositivos Uma plataforma de Uma plataforma de
desenvolvimento tem de desenvolvimento tem de integrar os novos dispositivos integrar os novos dispositivos de forma transparente; de forma transparente;
ConectividadeConectividade Baixo custo, a Internet a Baixo custo, a Internet a
universalizar-seuniversalizar-se Wireless, acesso a banda largaWireless, acesso a banda larga Proliferação de equipamentosProliferação de equipamentos Equipamentos ligados à Internet Equipamentos ligados à Internet
- PDAs, Telefones celulares etc.- PDAs, Telefones celulares etc.
Standards para a Internet Standards para a Internet Integração assente em XMLIntegração assente em XML
10
DemoDemoVídeo Web ServicesVídeo Web Services
11
AgendaAgenda
Web Services e Smart DevicesWeb Services e Smart DevicesA plataforma .NETA plataforma .NETO Modelo de ProgramaçãoO Modelo de ProgramaçãoSumárioSumário
12
O que é o .NET?O que é o .NET? Uma plataforma de desenvolvimento: Uma plataforma de desenvolvimento:
interfaces, componentes e ferramentas para interfaces, componentes e ferramentas para desenvolver software.desenvolver software.
A maior alteração dentro da Microsoft desde A maior alteração dentro da Microsoft desde que o Windows NT substituíu o DOSque o Windows NT substituíu o DOS
As alterações incluem:As alterações incluem: Formato do código, compiladores,Formato do código, compiladores, Modelos de carregamento e execução do código, Modelos de carregamento e execução do código, Modelo de segurança,Modelo de segurança, Modelo de objectos, metadados, protocolos remotingModelo de objectos, metadados, protocolos remoting Bibliotecas de classes,Bibliotecas de classes, ……
13
A plataforma .NETA plataforma .NET
14
O valor estratégico da O valor estratégico da plataformaplataformaSuporte ao desenvolvimento de novos Suporte ao desenvolvimento de novos
negócios assentes na tecnologianegócios assentes na tecnologia
15
Novos modelos de negócioNovos modelos de negócio
AUTENTICAÇÃOAUTENTICAÇÃO
Fornecedor AFornecedor A
………………
Fornecedor BFornecedor B
Fornecedor CFornecedor C
LeilõesLeilões
16
Novos modelos de negócioNovos modelos de negócio
AUTENTICAÇÃOAUTENTICAÇÃO
Fornecedor AFornecedor A
………………
Fornecedor BFornecedor B
Fornecedor CFornecedor C
LeilõesLeilões
PagamentosPagamentos
Empresa AEmpresa AEmpresa BEmpresa B
Empresa CEmpresa C
17
Novos modelos de negócioNovos modelos de negócio
AUTENTICAÇÃOAUTENTICAÇÃO
Fornecedor AFornecedor A
………………
Fornecedor BFornecedor B
Fornecedor CFornecedor C
LeilõesLeilões
PagamentosPagamentos
Empresa AEmpresa AEmpresa BEmpresa B
Empresa CEmpresa C
18
O software tem de permitir:O software tem de permitir:
O Software será a base dos O Software será a base dos novos modelos de negócionovos modelos de negócio
Experiências de utilização de software Experiências de utilização de software consistentes entre os diversos consistentes entre os diversos dispositivos;dispositivos;
Produção de software como um Produção de software como um serviço;serviço;
Modelo de programação consistente.Modelo de programação consistente.
19
AgendaAgenda
Web Services e Smart DevicesWeb Services e Smart DevicesA plataforma .NETA plataforma .NETO Modelo de ProgramaçãoO Modelo de ProgramaçãoSumárioSumário
20
O modelo de programação O modelo de programação tem de:tem de:
Simplificar o desenvolvimento de Simplificar o desenvolvimento de aplicaçõesaplicações
Fornecer um ambiente de execução Fornecer um ambiente de execução seguro e robustoseguro e robusto
Suporte para múltiplas linguagens Suporte para múltiplas linguagens de programaçãode programação
Simplificar a distribuição e Simplificar a distribuição e manutenção de aplicações manutenção de aplicações
22
A .NET Framework é o modelo de A .NET Framework é o modelo de programação que serve de base programação que serve de base para a visão .NETpara a visão .NET
.NET: Princípios.NET: Princípios Visão Microsoft para a computaçãoVisão Microsoft para a computação
Tornar a computação distribuida na Internet Tornar a computação distribuida na Internet comumcomum
Explorar o poder de processamento e largura de Explorar o poder de processamento e largura de banda cada vez mais baratosbanda cada vez mais baratos
Integração natural entre múltiplas aplicações e Integração natural entre múltiplas aplicações e dispositivosdispositivos
Disponibilizar software como um serviçoDisponibilizar software como um serviço Experiência de utilização nova e mais ricaExperiência de utilização nova e mais rica
23
Common Language RuntimeCommon Language Runtime
Base Class LibraryBase Class Library
ADO.NET and XMLADO.NET and XML
ASP.NETASP.NETWeb Forms Web ServicesWeb Forms Web Services
Mobile DevicesMobile Devices
WindowsWindowsFormsForms
Common Language Common Language Runtime (CLR) Runtime (CLR) Suporte múltiplas Suporte múltiplas
linguagenslinguagens Sistema único de tiposSistema único de tipos Deployment simplificadoDeployment simplificado Code Access SecurityCode Access Security
Bibliotecas base ricasBibliotecas base ricas Modelo de programação Modelo de programação
poderoso e consistentepoderoso e consistente Focus no código e Focus no código e
funcionalidadefuncionalidade Integração com as tools de Integração com as tools de
desenvolvimentodesenvolvimento Suporte de funcionalidade Suporte de funcionalidade
design-timedesign-time Suporte para Debugging, Suporte para Debugging,
profiling e instrumentaçãoprofiling e instrumentação
.NET Framework.NET Framework
24
CompiladorCompilador AssemblyAssemblyAssemblyAssembly
Common Language RuntimeCommon Language RuntimeDesenvolvimentoDesenvolvimento
C#C#J#J#VBVB
CobolCobol……
CILCILMetadataMetadata
ResourcesResources
public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); }}
public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); }}
CódigoCódigo
25
CompiladorCompilador AssemblyAssemblyAssemblyAssembly
DesenvolvimentoDesenvolvimento
C#C#J#J#VBVB
CobolCobol……
CILCILMetadataMetadata
ResourcesResources
public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); }}
public static void Main(String[] args ){ String usr; FileStream f; StreamWriter w; try { usr=Environment.GetEnvironmentVariable("USERNAME"); f=new FileStream(“C:\\test.txt",FileMode.Create); w=new StreamWriter(f); w.WriteLine(usr); w.Close(); } catch (Exception e){ Console.WriteLine("Exception:"+e.ToString()); }}
CódigoCódigo
AssemblyAssemblyAssemblyAssembly
DesenvolvimentoDesenvolvimento
ApplicationApplicationDirectoryDirectory
ApplicationApplicationDirectoryDirectory
GlobalGlobalAssemblyAssembly
Cache (GAC)Cache (GAC)
GlobalGlobalAssemblyAssembly
Cache (GAC)Cache (GAC)
Common Language RuntimeCommon Language RuntimeDistribuiçãoDistribuição
SetupSetupCopyCopy
BrowserBrowser
Download Download CacheCache
Download Download CacheCache
InstallInstall
26Debug EngineDebug Engine
IL to NativeIL to NativeCompilerCompiler
ApplicationApplicationDirectoryDirectory
ApplicationApplicationDirectoryDirectory
SetupSetupCopyCopy
BrowserBrowser
Download Download CacheCache
Download Download CacheCache
GlobalGlobalAssemblyAssembly
Cache (GAC)Cache (GAC)
GlobalGlobalAssemblyAssembly
Cache (GAC)Cache (GAC)
AssemblyAssemblyon Target on Target MachineMachine
AssemblyAssemblyon Target on Target MachineMachine
Common Language RuntimeCommon Language Runtime
AssemblyAssemblyAssemblyAssembly
DesenvolvimentoDesenvolvimento DistribuiçãoDistribuição
InstallInstall
ExecuçãoExecução
AssemblyAssemblyLoaderLoaderSecuritySecurityClass Class
LoaderLoader
Native .exe Native .exe + GC table + GC table Native .exe Native .exe + GC table + GC table
Code Code ManagerManager
Garbage CollectionGarbage Collection
Exception ManagerException Manager
Thread SupportThread Support
COM InteropCOM Interop
Policy<?xml version="1.0" encoding="utf-8" ?><configuration> <mscorlib> <security> <policy> <PolicyLevel version="1"> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="Nothing" Name="All_Code" Description="Code group grants no permissions and forms the root of the code group tree."> <IMembershipCondition class="AllMembershipCondition" version="1"/> <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust"
27
DemoDemoCommon Language RuntimeCommon Language Runtime
28
Objectivos no desenho Objectivos no desenho da .NET Frameworkda .NET Framework
Simplificar o desenvolvimento de Simplificar o desenvolvimento de aplicaçõesaplicações
Fornecer um ambiente de execução Fornecer um ambiente de execução seguro e robustoseguro e robusto
Suporte para múltiplas linguagens Suporte para múltiplas linguagens de programaçãode programação
Simplificar a distribuição e Simplificar a distribuição e manutenção de aplicaçõesmanutenção de aplicações
29
Simplificar o desenvolvimentoSimplificar o desenvolvimento
HWND hwndMain = CreateWindowEx(HWND hwndMain = CreateWindowEx( 0, "MainWinClass", “Janela Principal",0, "MainWinClass", “Janela Principal", WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL,WS_OVERLAPPEDWINDOW | WS_HSCROLL | WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,CW_USEDEFAULT, CW_USEDEFAULT, (HWND)NULL, (HMENU)NULL, hInstance, NULL); (HWND)NULL, (HMENU)NULL, hInstance, NULL); ShowWindow(hwndMain, SW_SHOWDEFAULT); ShowWindow(hwndMain, SW_SHOWDEFAULT); UpdateWindow(hwndMain);UpdateWindow(hwndMain);
Form form = new Form();Form form = new Form();form.Text = “Janela Principal";form.Text = “Janela Principal";form.Show();form.Show();
Windows APIWindows API
.NET Framework.NET Framework
30
Simplificar o desenvolvimentoSimplificar o desenvolvimento
OrganizaçãoOrganização O código é organizado em classes e O código é organizado em classes e
namespaces hierárquicosnamespaces hierárquicos
Sistema de tipos unificadoSistema de tipos unificado Tudo é um objecto, não há Variants, um Tudo é um objecto, não há Variants, um
só tipo string, todas as strings são só tipo string, todas as strings são UnicodeUnicode
Orientado a ComponentesOrientado a Componentes Suporte nativo para propriedades, Suporte nativo para propriedades,
métodos, eventos, e atributosmétodos, eventos, e atributos Funcionalidade Design-timeFuncionalidade Design-time
31
System
System.Data System.Xml
System.Web
Globalization
Diagnostics
Configuration
Collections
Resources
Reflection
Net
IO
Threading
Text
ServiceProcess
Security
Design
ADO
SQLTypes
SQL
XPath
XSLT
RuntimeInteropServices
Remoting
Serialization
Serialization
Configuration SessionState
Caching Security
ServicesDescription
Discovery
Protocols
UIHtmlControls
WebControls
System.Drawing
Imaging
Drawing2D
Text
Printing
System.WinForms
Design ComponentModel
..NET Framework NamespaceNET Framework Namespace
32
Robusto e SeguroRobusto e Seguro
Gestão automática da “existência” dos objectosGestão automática da “existência” dos objectos Todos os objectos no.NET são geridos pelo “garbage Todos os objectos no.NET são geridos pelo “garbage
collector”collector” Não há pointers “perdidos” ou referências circularesNão há pointers “perdidos” ou referências circulares
Code correctness and type-safetyCode correctness and type-safety O código IL pode ser verificado para garantir que é “type-O código IL pode ser verificado para garantir que é “type-
safe”safe” Não existem casts inválidos, variavéis não inicializadas, Não existem casts inválidos, variavéis não inicializadas,
acesso a posições incorrectas nos arrays…acesso a posições incorrectas nos arrays… Segurança baseada em “provas”Segurança baseada em “provas”
Baseada na origem do código, assim como do utilizadorBaseada na origem do código, assim como do utilizador As permissões são extensíveisAs permissões são extensíveis
33
Plataforma Multi-LinguagemPlataforma Multi-Linguagem
Liberdade de escolha da linguagemLiberdade de escolha da linguagem Todas as funcionalidades da .NET Framework Todas as funcionalidades da .NET Framework
estão disponíveis para qualquer linguagem .NETestão disponíveis para qualquer linguagem .NET Os componentes de uma aplicação podem ser Os componentes de uma aplicação podem ser
escritos em várias linguagensescritos em várias linguagens Os Debuggers, profilers, code coverage Os Debuggers, profilers, code coverage
analyzers, etc…, funcionam para todas as analyzers, etc…, funcionam para todas as linguagenslinguagens
Compiladores disponíveisCompiladores disponíveis Da Microsoft: VB.NET, C++, C#, JScript.NET, J#Da Microsoft: VB.NET, C++, C#, JScript.NET, J# De outras companhias / universidades: APL, De outras companhias / universidades: APL,
COBOL, Eiffel, Fortran, Haskell, ML, Perl, COBOL, Eiffel, Fortran, Haskell, ML, Perl, Python, RPG, Scheme, Smalltalk, …Python, RPG, Scheme, Smalltalk, …
35
string s = "authors";SqlCommand cmd = new SqlCommand("select * from "+s, sqlconn);cmd.ExecuteReader();
C#C#
Dim s as Strings = "authors"Dim cmd As New SqlCommand("select * from " & s, sqlconn)cmd.ExecuteReader()
VB.NETVB.NET
Suporte a várias linguagensSuporte a várias linguagens
C++C++String *s = S"authors"; SqlCommand cmd = new SqlCommand(String::Concat(S"select * from ", s),
sqlconn); cmd.ExecuteReader();
36
Suporte a várias linguagensSuporte a várias linguagens
J#J#String s = "authors";
SqlCommand cmd = new SqlCommand("select * from "+s, sqlconn);
cmd.ExecuteReader();
37
String *s = S"authors"; SqlCommand cmd = new SqlCommand(String::Concat(S"select * from ", s), sqlconn); cmd.ExecuteReader();
PerlPerl
s = "authors"cmd =SqlCommand("select * from " + s, sqlconn)cmd.ExecuteReader()
PythonPython
var s = "authors"var cmd = new SqlCommand("select * from " + s, sqlconn)cmd.ExecuteReader()
Jscript.NETJscript.NET
Suporte a várias linguagensSuporte a várias linguagens
38
ENVIRONMENT DIVISION.CONFIGURATION SECTION.REPOSITORY. CLASS SqlCommand AS "System.Data.SqlClient.SqlCommand" CLASS SqlConnection AS "System.Data.SqlClient.SqlConnection".DATA DIVISION.WORKING-STORAGE SECTION.01 str PIC X(50).01 cmd-string PIC X(50).01 cmd OBJECT REFERENCE SqlCommand.01 sqlconn OBJECT REFERENCE SqlConnection.PROCEDURE DIVISION. *> Establish the SQL connection here somewhere.MOVE "authors" TO str.STRING "select * from " DELIMITED BY SIZE, str DELIMITED BY " " INTO cmd-string.INVOKE SqlCommand "NEW" USING BY VALUE cmd-string sqlconn RETURNING cmd.INVOKE cmd "ExecuteReader".
CobolCobol
Suporte a várias linguagensSuporte a várias linguagens
39
assembly_external(name="System.Data.SqlClient.SqlCommand")sqlcmdcharacter*10 xsqlcmd Cmd x='authors'cmd = sqlcmd("select * from "//x, sqlconn) call cmd.ExecuteReader()end
FortranFortran
DclFld MyInstObj Type( System.Data.SqlClient.SqlCommand ) DclFld s Type( *string ) s = "authors" MyInstObj = New System.Data.SqlClient.SqlCommand("select *
from "+s, sqlconn) MyInstObj.ExecuteReader()
RPGRPG
Suporte a várias linguagensSuporte a várias linguagens
40
Suporte a várias linguagensSuporte a várias linguagens
|s| := 'authors'. |cmd| := SqlCommand('select * from '+s, sqlconn). cmd.ExecuteReader().
SmalltalkSmalltalk
APLAPLs←String.New ‘authors’cmd←SqlCommand.New (‘select * from ‘,s.ToString σ) sqlconncmd.ExecuteReader
41
(let* ( (s "authors") (cmd (new-SqlCommand (string-append "select * from " s) sqlconn)))(execute-command cmd))
SchemeScheme
ExecuteReader = invoke System.Data.SqlClient.ExecuteReader();SqlCommand = create System.Data.SqlClient.SqlCommand(String,\ System.Data.SqlClient.SqlConnection);query = sqlconn -> let{ s = "authors"; } in { cmd <- SqlCommand ("select * from "+s, sqlconn); cmd # ExecuteReader(); }; MondrianMondrian
local s: STRING cmd: SQLCOMMANDdo s := "authors" create cmd("select * from " + s, sqlconn) cmd.ExecuteReader()end
EiffelEiffel
Suporte a várias linguagensSuporte a várias linguagens
42
DemoDemoSuporte multilinguagemSuporte multilinguagem
43
Standardização do .NETStandardização do .NET
CLI e C# “standardizados” pela ECMACLI e C# “standardizados” pela ECMA Submissão conjunta com Intel e Hewlett-PackardSubmissão conjunta com Intel e Hewlett-Packard A 13 de Dezembro de 2001, ECMA General A 13 de Dezembro de 2001, ECMA General
Assembly ractificou as especificações do C# e da Assembly ractificou as especificações do C# e da “common language infrastructure” (CLI) para “common language infrastructure” (CLI) para standards internacionais. standards internacionais.
Existem companhias a implementar as Existem companhias a implementar as especificações ECMA. Por exemplo, a Ximian com o especificações ECMA. Por exemplo, a Ximian com o Project Mono (.NET em Linux)Project Mono (.NET em Linux)
Está disponível para download “Está disponível para download “The Microsoft The Microsoft Shared Source CLI Implementation” para Windows e Shared Source CLI Implementation” para Windows e FreeBSD FreeBSD
http://msdn.microsoft.com/net/ecmahttp://msdn.microsoft.com/net/ecma//
44
Como saber mais sobre Como saber mais sobre a .NET Framework?a .NET Framework?
.NET Framework SDK (essencial!).NET Framework SDK (essencial!) CLR, compiladores de linha de comando, CLR, compiladores de linha de comando,
debuggers, class libraries, documentação, …debuggers, class libraries, documentação, … Download grátisDownload grátis Size: ~100 MBSize: ~100 MB
Visual Studio .NET (opcional)Visual Studio .NET (opcional) IDE (Ambiente de Desenvolvimento IDE (Ambiente de Desenvolvimento
Integrado) Integrado) Size: ~1.5 GBSize: ~1.5 GB
45
.NET Compact Framework.NET Compact Framework
.NET Framework para dispositivos .NET Framework para dispositivos embebidosembebidos
46
AgendaAgenda
Web Services e Smart DevicesWeb Services e Smart DevicesA plataforma .NETA plataforma .NETO Modelo de ProgramaçãoO Modelo de ProgramaçãoSumárioSumário
47
.NET em suma.NET em suma A plataforma de desenvolvimento de A plataforma de desenvolvimento de
software da Microsoft para a próxima software da Microsoft para a próxima décadadécada
Baseada em standards, para múltiplas Baseada em standards, para múltiplas linguagens e múlplipos dispositivoslinguagens e múlplipos dispositivos
Baseada na ideia dos Web ServicesBaseada na ideia dos Web Services
48
Referências:Referências: Sites:Sites:
http://http://msdn.microsoft.commsdn.microsoft.com/net/net
http://http://www.microsoft.comwww.microsoft.com//portugalportugal
http://www.microsoft.com/portugal/msdnhttp://www.microsoft.com/portugal/msdn
News GroupsNews Groups
News.microsoft.comNews.microsoft.com
Microsoft.public.pt.vsnetMicrosoft.public.pt.vsnet
49
Muito Obrigado !Muito Obrigado !