La beta 1 di Silverlight 4 finalmente apre la strada a tutta una serie di appliciazioni che richiedono accesso a risorse locali superiore a quanto offerto dalla modalita sandboxed di SL3.
Per una lista completa delle nuove feature suggerisco questo post:
http://timheuer.com/blog/archive/2009/11/18/whats-new-in-silverlight-4-complete-guide-new-features.aspx
Tra le cose più interessanti, c'è la possibilità di accedere a oggetti COM via late binding (per la serie: COM è morto lunga vita a COM!). Questo apre la strada ad un'infinità di soluzioni, con le stesse modalità usate a suo tempo in VBScript o VBA.
Una delle strade che si aprono è l'accesso ad una base dati client side, accessibile via OLEDB / ADO come ad es. SQL Server. Di seguito un semplice esempio su come fare.
Ricordatevi di:
- Impostare in VS 2010 nelle opzioni Out-of-Browser: "Require elevated trust when running outside the browser" (elevated trust funziona solo out-of browser)
- Aggiungere Microsoft.CSharp.dll ai reference (per l'uso dei tipi dinamici)
Le performance di questo approccio non sono eccezionali, a causa dei continui roundtrip via COM interop. Si possono tuttavia migliorare notevolmente limitando il numero di chiamate COM ad es. con la clausola "FOR XML" della istruzione SELECT in T-SQL
private IList<Product> LoadData()
{
IList<Product> l = new List<Product>();
dynamic conn = ComAutomationFactory.CreateObject("ADODB.Connection");
try
{
conn.ConnectionString = @"Provider=SQLOLEDB.1;Integrated Security=SSPI;" +
@"Persist Security Info=False;Initial Catalog=AdventureWorks2008;" +
@"Data Source=.\MSSQL08";
conn.Open();
dynamic rs = conn.Execute("SELECT Name, ProductNumber, ListPrice, SellStartDate " +
"FROM Production.Product ORDER BY Name");
while (!rs.EOF)
{
l.Add(new Product() { Name = rs["Name"].Value,
ProductNumber = rs["ProductNumber"].Value,
ListPrice = rs["ListPrice"].Value,
SellStartDate = rs["SellStartDate"].Value });
rs.MoveNext();
}
rs.Close();
}
finally
{
conn.Close();
}
return l;
}
}
Alessandro Pilotti [MVP / IIS]