ottobre 2005 Blog Posts
Nelle scorse settimane ho discusso sull'opportunità o meno di far passare tutte le chiamate al SOS (Service Oriented Server ;-)) attraverso un unico servizio (per intenderci un asmx) che invia il messaggio al servizio corretto in base al contenuto.
Venendo da un modo di applicazioni n-tier, questo paradigma non mi è molto congeniale.Una delle principali problematiche che vedo sono legate alla facilità con cui uno sviluppatore riesce a 'trovare' i servizi che gli servono per implementare una determinata funzionalità (tale concetto lo riassumo come discoverability, che mi sembra rendere bene l'idea, ma non è forse neanche inglese!).Averli in un asmx raggruppati...
Alcuni prodotti (anche per .net 2.0) per skinning delle winform....
DotNetSkin
IrisSkin
http://www.stardock.com/
Dovendo gestire le chiamate ad un numero elevato di servizi .asmx (sia che si chiamino da asp.net che da smartclient) nasce il problema di come gestire i casi in cui uno schema è condiviso da più servizi.
Per i casi 'semplici' con l'utilizzo del "add web references" di visual studio 2005 si ottiene un proxy che ingloba i tipi esposti da quel servizio. Avremo quindi inclusi sia i tipi semplici che 'entity object' e DataSet.
Nel primo caso sarà aggiunta la definizione nel file Reference.cs
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.26")][System.SerializableAttribute()][System.Diagnostics.DebuggerStepThroughAttribute()][System.ComponentModel.DesignerCategoryAttribute("code")][System.Xml.Serialization.XmlTypeAttribute(Namespace="http://myNamespace/")]public partial class SalesOrderDetail { private int salesOrderIdField; private decimal unitPriceField; private string carrierTrackingNumberField; private System.DateTime modifiedDateField; /// public int SalesOrderId { get { return this.salesOrderIdField; } set { this.salesOrderIdField = value; } } /// public decimal UnitPrice { get { return this.unitPriceField; } set { this.unitPriceField = value; } } /// public string CarrierTrackingNumber { get { return this.carrierTrackingNumberField; } set { this.carrierTrackingNumberField = value; } } /// public System.DateTime ModifiedDate { get { return this.modifiedDateField; } set { this.modifiedDateField = value; } }}
nel secondo oltre che al codice (un tipo che eredita da System.Data.DataSet) avremo anche l'xsd corrispondente al typed dataset.
La classe generata...