• Nenhum resultado encontrado

Desenvolvimento de Componentes e Acesso a dados com ADO.NET

N/A
N/A
Protected

Academic year: 2021

Share "Desenvolvimento de Componentes e Acesso a dados com ADO.NET"

Copied!
107
0
0

Texto

(1)

Desenvolvimento de

Componentes e Acesso a

dados com ADO.NET

.NET Apprentice

Maio de 2004

José António Tavares jrt@isep.ipp.pt

(2)

Requisitos

z

Conhecimentos de Base de Dados (Relacionais)

z

Programação:

z De preferência VB ou C/C++ ou C# ou Java z Paradigma OOP

z

Estar familiarizado com Microsoft SQL Server ou

outras aplicações como o Microsoft Access

z

Conhecer o ADO embora não seja fundamental

z

Estar familiarizado com o desenvolvimento de

(3)

Agenda

1.

Programação com ADO.NET

2.

Componentes na Framework .NET

3.

Exemplos de Aplicação:

Componentes + ADO.NET

4.

Instalação de componentes –

(4)

PARTE I

Programação com ADO.NET

(5)

Conteúdo

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

6.

Ler e Escrever XML com ADO.NET

(6)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

(7)

Cenários Conectados

z

Um cenário conectado é aquele no qual os

utilizadores estão permanentemente ligados à

bases de dados

z

Vantagens

:

z É mais fácil exercer segurança ao nível do ambiente z A concorrência é mais fácil de controlar

z Os dados estão mais actualizados que nos outros cenários

z

Desvantagens

z É necessário haver uma ligação constante ao servidor z Escalabilidade

(8)

Cenários Desconectados

z Num ambiente desconectado, um sub-conjunto de dados pode ser copiado e modificado independentemente e mais tarde as alterações podem ser introduzidas de novo na base de dados

z

Vantagens

z Pode-se trabalhar a qualquer altura e pode-se efectuar uma

ligação à base de dados apenas quando necessário

z Outros utilizadores podem usar os recursos

z Este tipo de ambientes aumenta a escalabilidade e

desempenho das aplicações z

Desvantagens

(9)

O que é o ADO.NET?

z

ADO.NET é a solução de acesso a dados em .NET

z Faz parte integrante Framework .NET

z Substitui completamente o ADO ‘clássico’

z

Constitui uma evolução ao ‘clássico’ ADO

z Existem similaridades mas mudou muito

z

Suporta os modelos conectados e desconectados

z DataReaders para acesso conectados a dados z DataSets e DataAdapters para desconectados

z

Baseado em “pluggable Data Providers”

(10)

ADO.NET

A nível do armazenamento de Dados, o ADO.NET suporta

vários tipos:

z

Não estruturados;

z

Estruturados, não-hierárquicos

z Ficheiros CSV (Comma Separated Value), Folhas Microsoft

Excel, Ficheiros Microsoft Exchange, …

z

Hierárquicos

z Documentos XML e outros

(11)
(12)

ADO.NET e a Framework .NET

Message Message Queuing Queuing COM+ COM+ (Transactions, Partitions,

(Transactions, Partitions, IISIIS WMIWMI

Common Language Runtime

Common Language Runtime

.NET Framework Class Library

.NET Framework Class Library

ADO.NET: Data and XML

ADO.NET: Data and XML

Web Services

Web Services User InterfaceUser Interface VB C++ C#

ASP.NET

ASP.NET

(13)

Connection

Connection

ADO

ADO.NET

Command

Command

Recordset

Recordset

XxxConnection

XxxConnection

XxxCommand

XxxCommand

DataSet

DataSet

XxxTransaction

XxxTransaction

XxxDataReader

XxxDataReader

XxxDataAdapter

XxxDataAdapter

(14)

ADO vs. ADO.NET

1/2

ADO

z Desenhado para acessos conectados z Amarrado ao modelo físico dos dados

z RecordSet é o contentor central de dados

z RecordSet é uma (1) tabela que contem todos os dados

z Obter dados de > 1 tabela requer um comando JOIN

z Os dados "são planos": perde relações e a navegação é sequencial

z Os tipos de dados estão limitados aos tipos de dados

COM/COM+

(15)

ADO vs. ADO.NET

2/2

ADO.NET

z Desenhado acessos desconectados

z Pode modelar dados logicamente (em memória)! z DataSet substitui o RecordSet

z DataSet pode conter múltiplas tabelas

z Obter dados de > 1 tabela não requer um comando JOIN

z Relações são preservadas e a navegação é relacional

z Os tipos de dados estão apenas limitados por esquemas

(schema) XML

z Não é necessário conversão de tipo de dados z XML, tal como HTML, é texto: “Firewall friendly”

(16)

Beneficios do ADO.NET

z

Interoperacionalidade através do uso de XML

z Standard aberto

z Texto legível e compreensível pelos humanos z Dados descrevem-se a si mesmos (XML)

z Usado transferir todos os dados em ADO.NET

z

Escalabilidade através de DataSet desconectados

z Conecções não são mantidas por longos periodos z “Database locking” não existe

z Works the way the Web works: “Hit and Run!”

(17)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

6.

Ler e Escrever XML com ADO.NET

(18)

Arquitectura do ADO.NET

DataAdapter Connection Command DataReader Company: Northwind Traders Company: Northwind Traders DataTables

Managed Provider Classes

Database

Database

(19)

SQL Server 7.0

Usar as classes ADO.NET num

cenário conectado

Num cenário conectado, os

recursos são mantidos no

servidor até

a ligação ser

fechada

1. Abrir ligação

2. Executar comando

3. Processar linhas no reader

4. Fechar reader 5. Fechar ligação

SqlConnection

SqlConnection

SqlCommand

SqlCommand

SqlDataReader

SqlDataReader

(20)

Usar as classes ADO.NET

num cenário desconectado

Num cenário desconectado, os

recursos não são mantidos no

servidor durante o processamento

dos dados

1. Abrir a ligação 2. Encher o DataSet 3. Fechar a ligação 4. Processar o DataSet 5. Abrir a ligação

6. Actualizar a fonte de dados

SqlConnection

SqlConnection

SqlDataAdapter

SqlDataAdapter

DataSet

DataSet

(21)

Arquitectura do ADO.NET

Esta animação descreve a

arquitectura do ADO.NET

considerando ambos os modelos:

(22)

O ADO.NET é totalmente integrado com

XML

XML Web Services DataSet DataSet Request data 1 1 1 222 SQL query Results 3 3 3 XML 4 4 4 Updated XML 5 5 5 666 SQL updates Data Source Cliente DataSet DataSet

ADO.NET e XML

(23)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

6.

Ler e Escrever XML com ADO.NET

(24)

O que são .NET Data Providers

z

Definição

z Um .NET “data provider” é um conjunto de classes que

pode ser usado para efectuar ligações a bases de dados, manipular e actualizar os dados

z

Tipos de .NET data providers

z SQL Server .NET Data Provider z OLE DB .NET Data Provider z ODBC .NET Data Provider

(25)

DataSet

SQL Server .NET

Data Provider

SQL Server .NET

Data Provider

OLE DB .NET

Data Provider

OLE DB .NET

Data Provider

SQL Server 7.0 (e posterior) OLEDB sources (SQL Server 6.5)

Modelo de objectos do

ADO.NET

(26)

Os Namespaces

System.Data

System.Data.Common

System.Data.SqlClient

System.Data.OleDb

System.Data.SqlTypes

System.Xml

(27)

Classes do .NET Data Provider

z XxxConnection – exemplo, SqlConnection

z XxxTransaction – exemplo, SqlTransaction

z XxxException – exemplo, SqlException

z XxxError – exemplo, SqlError

z XxxCommand – exemplo, SqlCommand

z XxxParameter – exemplo, SqlParameter

z XxxDataReader – exemplo, SqlDataReader

z XxxDataAdapter – exemplo, SqlDataAdapter

(28)

Gestão de conecções

z

Abrir e fechar conexões explicitamente:

z Open z Close

z

Abrir e fechar ligações implicitamente:

z Os “Data Adapters” podem abrir e fechar as ligações

automaticamente sempre que necessário

z

O método Dispose:

(29)

OleDbConnection e

SQLConnection

z

Criação, abertura e fecho de uma conecção a uma

fonte de dados

z

Exemplo OleDbConnection :

String conStr="Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=NWIND_RW.MDB";

OleDbConnection aConn = new OleDbConnection(conStr); aConn.Open();

// acesso, inserção e actualização de dados

(30)

Pooling de Conecções

z

A abordagem desconectada melhora significativamente

a escalabilidade

z No entanto, requisitar frequentemente conecções degrada o

desempenho das aplicações

z

O “pooling” de conecções permite uma ‘

pool

’ de

conecções idênticas partilhadas por múltiplos

utilizadores/aplicações

z Escalável e rápido

(31)

Pooling de Conecções com o

SQL Server

Esta animação descreve como é

que o pooling

de conecções

funciona com o Microsoft SQL

Server 2000

(32)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

(33)

O objecto COMMAND

z

O objecto command é uma referência a uma

instrução de SQL ou Stored Procedure

z

Propriedades

z (Name), Connection, CommandType, CommandText,

Parameters

z

Métodos

z ExecuteScalar, ExecuteReader, ExecuteNonQuery z ExecuteXmlReader (só para o SqlCommand)

(34)

Retornar só um registo

O ADO.NET é mais eficiente que o ADO “clássico”,

dado que este retorna um RecordSet completo

Exemplos de utilização:

y Obter as unidades em stock para um determinado produto

y Contar os produtos

(35)

Retornar múltiplos registos

z

DataReader

z

Read-only

z

Forward-only

z

O método ExecuteReader retorna um

(36)

Exemplo Data Reader

Dim cmProducts As New SqlCommand( _

"SELECT ProductName, UnitsInStock " & _ "FROM Products", cnNorthwind)

cnNorthwind.Open()

Dim rdrProducts As SqlDataReader

rdrProducts = cmProducts.ExecuteReader()

Do While rdrProducts.Read()

ListBox1.Items.Add(rdrProducts.GetString(0))

(37)

Instruções de Inserção e

Actualização de Dados

Dim cmd As SqlCommand = New SqlCommand(_

"dbo.IncreaseProductPrices", cnNorthwind) cmd.CommandType = CommandType.StoredProcedure cnNorthwind.Open()

Dim affected As Integer = cmd.ExecuteNonQuery()

cnNorthwind.Close()

(38)

Transacções

z

XxxConnection – por exemplo, SqlConnection

z

BeginTransaction

z

XxxTransaction – por exemplo, SqlTransaction

z

Commit

z

Rollback

(39)

DEMO 01

z

Criar uma solução em Visual Studio .NET do tipo

Database

z

Criar uma pequena aplicação que ilustra o modelo

(40)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

(41)

Como é constituído o DataSet

Database Connection Stored Procedure DataSet DataTable DataTable DataRow DataColumn DataTable

(42)

Modelo de Objectos do

DataSet

DataSet DataTableCollection DataTable DataColumnCollection DataRowCollection ConstraintCollection DataColumn DataRow Constraint

(43)

DataSet, DataTable, DataColumn

z

Criar um DataSet

z Arrastar o controlo DataSet da Toolbox

z

Criar uma DataTable

z Editar a colecção de Tables de um DataSet usando

a janela de propriedades

z

Criar uma DataColumn e adicioná-la a uma

DataTable

z Editar a colecção de Columns de uma DataTable

(44)

System.Data — DataSet e

DataTable

Criar DataTable e adicionar a um DataSet

DataSet ds = new DataSet();

// Create DataTable object: “Customers”. DataTable dt= new DataTable( “Customers” ); // Create and add columns to the table

// 1. Explicitly create and Add a DataColumn

DataColumn dc = new DataColumn( “CustID”, Int16 ); dt.Columns.Add( dc );

// 2. Implicitly Create and Add columns (DataColumn). dt.Columns.Add( “First_Name”, String );

dt.Columns.Add( “Last_Name”, String );

(45)

Restrição de Chave Primária

z

Usar a propriedade PrimaryKey da DataTable

z Seleccionar as colunas pela ordem desejada z Não permite mudar o nome à restrição

z

Editar a colecção de Constraints da DataTable

z Adicionar uma UniqueConstraint z Dar o nome à restrição

z Seleccionar as colunas

(46)

Expressões “Customisadas”

z

As expressões “Custom” são colunas cujos valores

são originados em cálculos e não em valores

guardados

z

Usar a propriedade Expression da DataColumn

z Sum([Unit Price] * [Quantity])

z

As funções de agregação podem usar relações

pai/filho

(47)

DEMO 02

z

Um pequena aplicação que ilustra programaticamente,

(48)

Inserir registos

z

Criar uma linha nova

DataRow drNovoEmpregado = dtEmpregados.NewRow();

z

Preencher a nova linha

drNovoEmpregado["EmpregadoID"] = 11; drNovoEmpregado["Nome"] = "Nuno";

z

Adicionar a linha a uma DataTable

dtEmpregados.Rows.Add(drNovoEmpregado);

z

Criar, preencher e adicionar numa só instrução

(49)

Modificar registos

z

O método BeginEdit da classe DataRow

z Desliga o lançamento de eventos e

excepções

z

Os métodos EndEdit e CancelEdit da

classe DataRow

z Ligam de novo o lançamento de eventos e

(50)

Apagar registos

z

O método Remove da classe DataRowCollection

apaga completamente o registo da colecção

dtEmpregados.Rows.Remove(drEmpregado);

z

O método Delete da classe DataRow marca o registo

como apagado. Este fica escondido, mas acessível,

se necessário

(51)

Alterações de dados no

DataSet

Uma DataRow pode guardar múltiplas versões de

valores para cada coluna:

z DataRowVersion.Current

z O valor actual da coluna

z DataRowVersion.Original

z O valor da coluna antes de qualquer alteração ter ocorrido

z DataRowVersion.Proposed

z O valor da coluna durante o ciclo BeginEdit / EndEdit

z DataRowVersion.Default

(52)

Processamento de Versões de

linha

CURRENT ORIGINAL PROPOSED

White White N/A

White White Brown

Brown White N/A

dataRow.BeginEdit();

dataRow[ "au_lname" ] = "Brown";

(53)

Processamento do Row State

CURRENT ORIGINAL ROW STATE

White White Unchanged

Brown White Modified

Brown Brown Unchanged

dr["au_lname"] = "Brown";

(54)

Actualizações com o

DataAdapter

Actualizações são escritas na base de dados usando o método

Update do DataAdapter

z DataAdapter analisa o “Row State” para cada linha

z Executa a acção apropriada (insert, update or delete) de acordo com o seu “row state”

z Usa os objectos Command atribuidos às suas propriedades

InsertCommand, UpdateCommand e DeleteCommand

RowState = Unchanged

RowState = Added

Ignore

Use INSERT command

(55)

Optimização de actualizações

z

Objectos do tipo DataSet e DataTable suportam o método

GetChanges

z GetChanges sem argumentos

z Extrai todas as linhas cujo RowState não é Unchanged

dsChanges = ds.GetChanges();

z GetChanges com argumento do tipo “RowState”

z Extrai apenas as linhas com um RowState especificado z Permite controlar a ordem em que os “inserts”, “updates” e

“deletes” são efectuados à base de dados

(56)

Usar o método SELECT

z

As DataTables têm um método de Select que

permite filtrar as DataRows de modo a cumprir com

restrições de ordenação e de estado

z

Três parâmetros opcionais

z Expressões de filtragem, como por exemplo,

"City=‘Porto'"

z Ordenar, por exemplo, "City ASC"

(57)

Criar um DataView

z

Criar um DataView através da utilização dos

controlos

z

Criar um DataView programaticamente

DataView dvProdutos = new

DataView(dsNorthwind.Tables["Products"]); dvProdutos.Sort = "UnitPrice";

dvProdutos.RowFilter = "CategoryID > 4"; grdProducts.DataSource = dvProdutos;

z

Aplicar um DataView a um DataTable

(58)

Objectos DataView - Exemplo

// Code for myTable “Customers” with

// “Name” column not shown

DataView view1 = new DataView( myTable ); DataView view2 = new DataView( myTable );

// Creates Ascending view of Customers by “Name” view1.Sort = “Name ASC”;

// Set the view to show only modified (original) rows view2.RowStateFilter=

DataViewRowState.ModifiedOriginal; // Bind to UI element(s)...

DataGrid myGrid = new DataGrid();

(59)

DEMO 03

z

Considerando a aplicação do DEMO 02 e

programaticamente:

z

Adicionar e actualizar registos

z

Criar DataViews

(60)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

(61)

ADO.NET: Data e XML

ADO.NET: Data and XML

ADO.NET: Data and XML

OleDb

OleDb SqlClientSqlClient

Common

Common SQLTypesSQLTypes System.Data System.Data XSL XSL Serialization Serialization XPath XPath System.Xml System.Xml

(62)

XML e ADO .NET

z

Método ReadXML

dsNorthwind.ReadXml(@"c:\XML\teste.xml", XmlReadMode.InferSchema); z

Método WriteXML

dsNorthwind.WriteXml(@"c:\XML\teste.xml", XmlWriteMode.WriteSchema);

(63)

DEMO 04

z

Utilização de XML

z

Um pequena aplicação que ilustra a persistência de

(64)

PARTE I

Programação com ADO.NET

1.

Desenho de aplicações centradas em dados

2.

Arquitectura ADO.NET

3.

Ligação a Base de Dados

4.

Operações ligadas à Base de Dados

5.

Construção de Data Sets

(65)

DataAdapter

z

Pode-se preencher um DataSet através de um

DataAdapter

z

Invoca-se o método Fill do DataAdapter

z

O método Fill executa o SelectCommand

z

Preenche o DataSet com a estrutura e conteúdo do

resultado do inquérito

z

Para optimizar o desempenho

z

aDataSet.EnforceConstraints=False

(66)

DataAdapter - Exemplo

// Visual C#

DataSet dsCustomers = new DataSet();

dsCustomers.Tables.Add(new DataTable("Customers"));

dsCustomers.Tables[0].BeginLoadData();

daCustomers.Fill(dsCustomers, "Customers"); dsCustomers.Tables[0].EndLoadData();

dataGrid1.DataSource =

(67)

Algumas operações do

DataAdapter

z Deve-se usar o método Merge para juntar dois DataSets – um

original e um que contenha apenas as mudanças ao original

z O método de Update de um DataAdapter chama o comando

apropriado para cada linha alterada (INSERT, UPDATE, DELETE) numa DataTable específica

z O método AcceptChanges de um DataSet efectua o Commit a

todas as alterações efectuadas a um DataSet específico desde o seu último carregamento ou desde que foi chamado este método pela última vez

(68)

DEMO 05

z Um pequena aplicação que mostra como criar e preencher DataSets a partir de fontes de dados e como persistir as

alterações dos DataSets para fontes de dados

(69)

Typed DataSets

Visual Studio .NET pode gerar “strongly typed DataSets”

z Classes customisadas derivadas de DataSet

z Proporciona toda a funcionalidade dos DataSet

z Contem classes, métodos, eventos e propriedades especificas

relacionadas com os dados em questão

z Por exemplo, um “typed DataSet” pode conter:

z Uma classe chamada “Customers” deriveda de DataTable z Uma classe chamada “CustomerRow” deriveda de DataRow

(70)

Typed DataSets - Vantagens

z “Compile-time type checking” z Funcionalidades adicionais

z Por exemplo, o método FindByCustomerID

z Código mais legível e manutenção facilitada z Total suporte pelo IntelliSense

z Torna o código mais legível e menos sujeito a erros

string s = customerDataSet.Customers[ 1 ].Name;

comparado com :

string s = (string) customerDataSet. Tables["Customers"].

(71)

Typed DataSets - Criar

z

Visual Studio gera typed DataSets a partir definições XML

schema (XSD)

z

Visual Studio oferece varias formas de gerar definições XML

schema

z A forma mais fácil é:

z Seleccionar o “Add New Item” wizard

z Seleccionar a template Data Set para adicionar um ficheiros

XSD

z Arrastar uma table ou uma “stored procedure” do “Server

Explorer” para a área de trabalho

(72)

DEMO 06

z As mesma aplicação do DEMO 04, mas agora com Typed DataSets

(73)

PARTE II

Componentes na

(74)

Criação Componente para a

Framework .NET

Pontos a considerar

1.

Uso de Namespaces e declaração de classes

2.

Implementação de classes

3.

Implementação estruturada de gestão de

excepções

4.

Criação de propriedades

(75)

Criação Componente para a

Framework .NET

Exemplo de demonstração no Visual Studio

Componente simples que contem apenas um método que valida utilizadores. O utilizador e a respectiva palavra chave estão numa tabela da Base de Dados.

(76)

Criar uma Simples Aplicação

Cliente

Pontos a considerar

1.

Uso das Libraries

2.

Instanciação dos Componentes

3.

Chamar os Componentes

(77)

Criar uma Simples Aplicação

Cliente para a Consola

(78)

Criar uma Simples Aplicação

Cliente do tipo Windows Forms

(79)

PARTE III

Exemplos de Aplicação:

Componentes + ADO.NET

(80)

Loja de Informática

Componente simples que implementa as regras de negócio de uma loja de equipamentos e artigos de informática.

(81)

Loja de Informática

Desenvolvimento em duas camadas

z Apresentação – Interface com utilizador

z Aplicação local

z Acesso via Web

z Outras

(82)

Funcionalidades do componente:

z

Validação de utilizador/ password ;

z

Inserir / actualizar clientes;

z

Verificar se um determinado cliente / produto existe;

z

Actualizar a quantidade de produtos quando é feita

uma venda;

z

Inserir vendas (transacções) com validação da

(83)

Loja de Informática

(84)

PetShop - Microsoft

Microsoft .NET Pet Shop

(85)

PetShop - Microsoft

(86)

PetShop - Microsoft

(87)

PetShop - Microsoft

(88)

PARTE IV

Instalação de componentes –

“Deployment”

(89)

Instalação de componentes –

“Deployment”

1.

Conceitos Comuns

2.

Aplicações Simples

3.

Aplicações Baseadas em Componentes

(90)

Conceitos Comuns

z

Classes and Types Used in .NET Framework

Applications Are:

z

Organized in a hierarchy of namespaces

z

Stored in PE files, such as DLLs and EXEs

z

Fully described by metadata

z

Assemblies:

z

Are made up of one or more PE files

z

Contain a manifest that identifies the assembly

and its files

(91)

Aplicações Simples

z

Require .NET Runtime Be Installed on Local

Computer

z

Can Be Run Directly from a File Server or Copied

Locally

z

Make No Registry Entries

z

Cannot Break Another Application

z

Eliminate DLL Hell

(92)

Aplicações baseadas em

componentes

z

Assemblies Private to an Application

z

Same as a simple application

z

Assemblies Private to Related Applications

z

Deployed into a common subdirectory

z

Assemblies Shared with Other Unrelated

Applications

(93)

Configuração e Distribuição

z

Configuration

z

Maintained in plain-text files

z

Deployment

z

Common distribution formats, such as a

.CAB file

or a .MSI file

z

Common distribution mechanisms, such as

Windows 2000 IntelliMirror or Microsoft

(94)

Cenários de Instalação

z

A Simple Application

z

A Componentized Application

z

Specifying a Path for Private Assemblies

z

A Strong-Named Assembly

z

Deploying Shared Components

z

A Versioned Assembly

z

Creating Multiple Versions of a Strong-Named Assembly

z

Binding Policy

(95)

A Simple Application

z

Use the Microsoft Intermediate Language

Disassembler (Ildasm.exe) to Examine the

Assembly Manifest

z

Version information

z

Imported types

z

Exported types

z

Deploy the Application by:

z

Running the executable file directly from a file

server, or

z

Installing it locally by copying the file

(96)

Componentized Application

z

Assembly Component to Be Used by Application

z

Assembly Stringer.dll is built from Stringer.cs as follows:

z

Client Needs to Reference Assembly

z

Deployment by File Server or Local Copy

csc /target:library Stringer.cs

csc /target:library Stringer.cs

csc /reference:Stringer.dll Client.cs

(97)

Specifying a Path for Private

Assemblies

z

Specifying a Directory From Which to Load Private

Assemblies.

z Client.exe.config file specifies a privatePath tag

z

Configuration File’s XML Tags Are Case-Sensitive

<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath=“MyStringer"/> </assemblyBinding> </runtime> </configuration> <configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <probing privatePath=“MyStringer"/> </assemblyBinding> </runtime> </configuration>

(98)

y Global Assembly Cache

y Contains assemblies shared by unrelated applications

y Strong Names Are Required for Assemblies in the Cache

y Generate a public-private key pair:

y Add code to source file to specify version and key information:

y Compile: #if STRONG [assembly: System.Reflection.AssemblyVersion("1.0.0.0")] [assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")] #endif #if STRONG [assembly: System.Reflection.AssemblyVersion("1.0.0.0")] [assembly: System.Reflection.AssemblyKeyFile("orgKey.snk")] #endif sn –k orgKey.snk sn –k orgKey.snk

Strong-Named Assembly

(99)

Deploying Shared

Components

z

Installing the Strong-Named Component in

the Global Assembly Cache

z

Examining the Global Assembly Cache

z

Removing a Shared Component File

gacutil /i AReverser.dll gacutil /i AReverser.dll gacutil /l gacutil /l gacutil /u AReverser gacutil /u AReverser

(100)

A Versioned Assembly

z

Applications Need to Bind to a Suitable Version of

a Shared Assembly

z

The Version Number Is Represented by a 4-Part

Number

z

Applications Get the Versions of Assemblies with

Which They Were Built and Tested

z

Unless overridden by explicit policy rules

<major version>.<minor version>.<revision>.<build number>

(101)

Creating Multiple Versions of a

Strong-Named Assembly

z Building Two New Versions of AReverser with a New Key Pair

z Specify version 2.0.0.0 for one and 2.0.1.0 for the other

z For AReverser_v2.0.0.0\AReverser.cs:

z Build

z Use Ildasm.exe to Examine Different Versions

z Note the publickey and version numbers

#if STRONG [assembly: System.Reflection.AssemblyVersion("2.0.0.0")] [assembly: System.Reflection.AssemblyKeyFile("orgVerKey.snk")] #endif #if STRONG [assembly: System.Reflection.AssemblyVersion("2.0.0.0")] [assembly: System.Reflection.AssemblyKeyFile("orgVerKey.snk")] #endif csc /define:STRONG /target:library¬ /out:AReverser_v2.0.0.0\AReverser.dll AReverser_v2.0.0.0\AReverser.cs csc /define:STRONG /target:library¬ /out:AReverser_v2.0.0.0\AReverser.dll AReverser_v2.0.0.0\AReverser.cs .assembly AReverser { ... .publickey = (00 24 ... 82 B1 F2 A0 ) .assembly AReverser { ... .publickey = (00 24 ... 82 B1 F2 A0 ) .hash algorithm 0x00008004

(102)

Binding Policy

z Policy Resolution

z Allows an assembly reference, specified at compile time, to be modified after the application has been deployed without

recompiling

z Happens in the Following Stages:

1. Application-policy resolution

2. Publisher-policy resolution

3. Administrator-policy resolution

z In Each Stage, an XML Configuration File Is Read

z Note: XML is case-sensitive

z Version Numbers of Assemblies That Are Not Strong-Named

Are Not Checked

z Configuration File Tag Examples

(103)

Deploying Multiple Versions of

a Strong-Named Assembly

z

Install Both Versions of AReverser.dll into the Global

Assembly Cache

z

Compile the VerClient Executable and Specify

Version 2.0.0.0 of the AReverser Component

z

Use Version Policies to Control Assembly Binding at

Run Time

gacutil /i AReverser_v2.0.0.0\AReverser.dll gacutil /i AReverser_v2.0.1.0\AReverser.dll gacutil /i AReverser_v2.0.0.0\AReverser.dll gacutil /i AReverser_v2.0.1.0\AReverser.dll csc /reference:MyStringer\Stringer.dll¬ /reference:AReverser_v2.0.0.0\AReverser.dll VerClient.cs csc /reference:MyStringer\Stringer.dll¬ /reference:AReverser_v2.0.0.0\AReverser.dll VerClient.cs

(104)

Packaging and Deployment

Tools

z

Assembly Linker (Al.exe)

z

Global Assembly Cache tool (Gacutil.exe)

z

MSIL Disassembler (Ildasm.exe)

z

Strong Name (Sn.exe)

z

Native Image Generator (Ngen.exe)

z

Assembly Binding Log Viewer (Fuslogvw.exe)

z

.NET Framework Configuration Tool

(Mscorcfg.msc)

(105)
(106)

Mais Informação...

z

MSDN Library

z

http://msdn.microsoft.com/library

z

.net framework center

z

http://msdn.microsoft.com/netframework/

z

C#

z

http://msdn.microsoft.com/vcsharp/

z

ASP.net

z

http://www.asp.net

(107)

Desenvolvimento de

Componentes e Acesso a

dados com ADO.NET

.NET Apprentice

Maio de 2004

José António Tavares jrt@isep.ipp.pt

Referências

Documentos relacionados

O ANDES-SN reafirmou que as três entidades ali presentes faziam parte do Fórum dos SPF, portanto a mesa setorial deveria ter o papel de responder à pauta específica e não sobre

 Numéricos das das Propriedades Propriedades do do Ar Ar Úmido, Úmido, Cartas Cartas Psicrométricas, Psicrométricas, Processos Processos Psicrométricos, Psicrométricos,

As principais indicações para a realização foram a suspeita de tuberculose (458 pacientes) e uso de imunobiológicos (380 pacientes).. A maior prevalência de resultado positivo

Como não se conhece parâmetros hematológicos do pacu-manteiga Mylossoma duriventre Cuvier, 1817, a proposta do presente estudo foi descrever tais parâmetros em espécimes

A baixa taxa de desconto ao longo dos anos de produção do campo, para o cálculo da função objetivo, aliada a baixa produção de água que a locação de

Este presente artigo é o resultado de um estudo de caso que buscou apresentar o surgimento da atividade turística dentro da favela de Paraisópolis, uma

Changes in the gut microbiota appears to be a key element in the pathogenesis of hepatic and gastrointestinal disorders, including non-alcoholic fatty liver disease, alcoholic

Podemos então utilizar critérios tais como área, arredondamento e alongamento para classificar formas aparentadas a dolinas; no processamento digital de imagem, esses critérios