Sempre di più i
Web Services stanno diventando parte integrante di quasi tutte le nostre applicazioni; chi non ne ha creato uno anche solo per gioco? In questo Tip vedremo come poter consumare in modalità dinamica i nostri Web Services.
Perché utilizzare i Web Services in modalità dinamica?
Il primo motivo è perché spesso creiamo i nostri progetti in locale e quindi i nostri Web Services avranno come server il
"localhost" e spesso ci dimentichiamo modificare l'URL d'accesso quando si fa l'upload sul server di produzione, secondo motivo magari perché non sappiamo in anticipo lurl del nostro webservice.
In precedente articolo abbiamo già visto come consumare un Web Service, (per comodità uso un Web Service in locale chiamato
DbService) quindi dal nostro client dopo aver fatto
AddWebReference nella finestra del
Solution Explorer avremo questa situazione:
Poi andremo ad aprire il File
Refercence.cs se si utilizza C# o
Reference.vb se si programma in Visual Basic, per far questo si deve cliccare sullicona evidenziata in rosso:
Questo file non è altro che la nostra classe proxy che viene generata in automatico da
Visual Studio .NET e dove sono descritti tutti i nostri
Web Methods sia in modalità sincrona che asincrona. Se prendiamo il costruttore della nostra classe, avremo una situazione simile a questa:
VB.NETPublic Sub New()
MyBase.New
Me.Url = "http://localhost/dbservice/gestione.asmx"
End Sub
C#Public GestioneDB
{
this.Url = "http://localhost/dbservice/gestione.asmx"
}
Come vedete la proprietà
url è quella che definisce il path del Web Service. Per far diventare dinamica la nostra classe proxy dobbiamo cliccare sulle proprietà della webreferece e ci verrà mostrata questa finestra:
Se clicchiamo sulla proprietà
Url Behavior, abbiamo due scelte Static(default) e Dynamic.
Cliccate su
Dynamic e chiude la finestra della proprietà, apparentemente sembra non accadere niente, ma "magicamente" Visual Studio in automatico è andato a cambiare il costruttore della nostra classe proxy nel file Reference
Il nostro costruttore sarà diventato:
VB.NETPublic Sub New()
MyBase.New
Dim urlSetting As String = System.Configuration.ConfigurationSettings.AppSettings("GestioneDB.Gestione")
If (Not (urlSetting) Is Nothing) Then
Me.Url = String.Concat(urlSetting, "")
Else
Me.Url = "http://localhost/dbservice/gestione.asmx"
End If
End Sub
C#Public GestioneDB
{
string urlSetting = System.Configuration.ConfigurationSettings.AppSettings["GestioneDB.Gestione"];
if ((urlSetting != null))
{
this.Url = string.Concat(urlSetting, "");
}
else
{
this.Url = " http://localhost/dbservice/gestione.asmx";
}
}
Come vedete ha aggiunto una variabile
"urlSetting" che recupera il valore dal web.config attraverso la chiave GestioneDb.Gestione.
Indovinate un pò la chiave è stata aggiunta anche nel web.config non male verò?
<appSettings>
<add key=" GestioneDB.Gestione" value="http://localhost/dbservice/gestione.asmx"/>
</appSettings>