Chiamare un Web Service da PowerShell
Con le nuove versioni di PowerShell è possibile chiamare, in modo semplice, un Web Service tramite il comando New-WebserviceProxy:
una volta ottenuto il proxy, posso farmi restituire, ad esempio, i metodi che iniziano con Get:
oppure invocare un metodo senza parametri:
oppure con dei semplici passandoli tra parentesi:
La cosa cambia nel caso il parametro da passare è un oggetto.
Per prima cosa devo ricavare il namespace e costruire l'oggetto:
ed invocare il metodo passando l'oggetto come parametro:
Il codice completo è questo:
PowerShell
$url="http://service.sgart.local/WS/BookingHandler"
$ws = New-WebserviceProxy "$($url)?WSDL"
PowerShell
$ws | get-member -MemberType Method Get*
PowerShell
$ws.getOrders()
PowerShell
$ws.getOrdersByDay(1, "eventuale stringa")
La cosa cambia nel caso il parametro da passare è un oggetto.
Per prima cosa devo ricavare il namespace e costruire l'oggetto:
PowerShell
$ns= $ws.GetType().namespace;
$p = New-Object($ns + ".OrdersByDay")
Per ricavare il nome dell'oggetto fare riferimento al WSDL o all'output del comando precedente Get-Member
avendo l'oggetto posso impostare le proprietà:PowerShell
$p.dataOrdine = [DateTime]::Today.ToString("ddMMyy");
$p.cod =""
PowerShell
$ws.getOrdersByObject($p)
Il codice completo è questo:
PowerShell
$url="http://service.sgart.local/WS/BookingHandler"
$ws = New-WebserviceProxy "$($url)?WSDL"
#$ws | get-member -MemberType Method Get*
$ws.url = $url # da usare se nel [url=https://it.wikipedia.org/wiki/Web_Services_Description_Language]WSDL[/url] c'è come riferimento un indirizzo diverso, ad esempio localhost
$ns= $ws.GetType().namespace;
$p = New-Object($ns + ".OrdersByDay")
$p.dataOrdine = [DateTime]::Today.ToString("ddMMyy");
$p.cod =""
$result = $ws.getOrdersByObject($p)
#posso accedere alla struttura dell'oggetto (XML) ritornato
$result.Ordini #| Out-GridView
$result.Ordini.totale
$result.Ordini.dettaglio | % {
$_
$_.riga
}
Spesso i WSDL contengo come Uri del servizio un indirizzo differente da quello di pubblicazione, ad esempio fanno riferimento a localhost o al nome del server di sviluppo.
Dato che il proxy per effettuare la connessione usa questo valore il servizio risulta irraggiungibile e genera un errore di connessione quando viene invocato un metodo.
Per ovviare a questo problema è necessario sovrascrive la url con: $ws.url = $url
Dato che il proxy per effettuare la connessione usa questo valore il servizio risulta irraggiungibile e genera un errore di connessione quando viene invocato un metodo.
Per ovviare a questo problema è necessario sovrascrive la url con: $ws.url = $url