Az interneten, vagy belső hálózatunkon lehetnek un. webszolgáltatások. Ezek tulajdonképpen olyan osztályok, amelyek egy webkiszolgálóra vannak telepítve, http protokoll segítségével távolról is elérhetők és metódusaik, tulajdonságaik hasonlóan kezelhetők, mint a helyi osztályoké.
Nézzünk erre pár olyan példát, ahol a webszolgáltatás nyilvánosan elérhető az interneten. Erre legalkalmasabbak azok a webszolgáltatások, amelyek rendelkeznek WSDL leíró oldallal. Ez tulajdonképpen egy XML formátumú adatblokk, ami definiálja, hogy milyen tulajdonságai és metódusai vannak a webszolgáltatásnak, így ezt könnyen be lehet importálni a PowerShell alá.
Nézzünk erre egy konkrét példát! A http://www.webservicex.net oldalon sok ilyen szolgáltatás érhető el, nézzük az IP címből földrajzi helyet meghatározó szolgáltatást:
[1] PS C:\> $geoip = New-WebServiceProxy -Uri http://www.webservicex.net/geoips
ervice.asmx?WSDL
[2] PS C:\> $geoip | gm
TypeName: Microsoft.PowerShell.Commands.NewWebserviceProxy.AutogeneratedTyp
es.WebServiceProxy1cex_net_geoipservice_asmx_WSDL.GeoIPService
Name MemberType Definition
---- ---------- ----------
Disposed Event System.EventHandler Dispose...
GetGeoIPCompleted Event Microsoft.PowerShell.Comman...
GetGeoIPContextCompleted Event Microsoft.PowerShell.Comman...
Abort Method System.Void Abort()
BeginGetGeoIP Method System.IAsyncResult BeginGe...
BeginGetGeoIPContext Method System.IAsyncResult BeginGe...
CancelAsync Method System.Void CancelAsync(Sys...
CreateObjRef Method System.Runtime.Remoting.Obj...
Discover Method System.Void Discover()
Dispose Method System.Void Dispose()
EndGetGeoIP Method Microsoft.PowerShell.Comman...
EndGetGeoIPContext Method Microsoft.PowerShell.Comman...
Equals Method bool Equals(System.Object obj)
GetGeoIP Method Microsoft.PowerShell.Comman...
GetGeoIPAsync Method System.Void GetGeoIPAsync(s...
GetGeoIPContext Method Microsoft.PowerShell.Comman...
GetGeoIPContextAsync Method System.Void GetGeoIPContext...
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeSe...
GetType Method type GetType()
InitializeLifetimeService Method System.Object InitializeLif...
ToString Method string ToString()
AllowAutoRedirect Property System.Boolean AllowAutoRed...
ClientCertificates Property System.Security.Cryptograph...
ConnectionGroupName Property System.String ConnectionGro...
Container Property System.ComponentModel.ICont...
CookieContainer Property System.Net.CookieContainer ...
Credentials Property System.Net.ICredentials Cre...
EnableDecompression Property System.Boolean EnableDecomp...
PreAuthenticate Property System.Boolean PreAuthentic...
Proxy Property System.Net.IWebProxy Proxy ...
RequestEncoding Property System.Text.Encoding Reques...
Site Property System.ComponentModel.ISite...
SoapVersion Property System.Web.Services.Protoco...
Timeout Property System.Int32 Timeout {get;s...
UnsafeAuthenticatedConnectionSharing Property System.Boolean UnsafeAuthen...
Url Property System.String Url {get;set;}
UseDefaultCredentials Property System.Boolean UseDefaultCr...
UserAgent Property System.String UserAgent {ge...
A New-WebServicesProxy cmdlet segítségével lehet ilyen WSDL definíciós oldalakhoz csatlakozni, és ez a cmdlet egy helyi objektumot farag a távoli definíció alapján számunkra. Én ezt itt most a $geoip változóban tároltam és kilistáztam a tagjellemzőit.
Ezen webszolgáltatások általában működnek szinkron és aszinkron módon is. Szinkron módban elküldjük a kérést és várakozunk addig, amíg meg nem kapjuk a választ. Az aszinkron esetben elküldjük külön a kérést, és vissza is kapjuk a vezérlést. Majd lekérdezhetjük, hogy megszületett-e a válasz, ha igen, akkor lekérjük azt. Itt is megtaláljuk ezt a kétfajta működést a metódusok között.
Alapvetően két funkciót tudunk elérni ezen webszolgáltatás segítségével. Az egyik egy tetszőleges IP címhez tartozó földrajzi információk lekérdezése, a másik a hívó végpont IP címének és földrajzi információinak lekérdezése. Mindkettő elérhető mind szinkron és aszinkron módon is. Nézzük a szinkron üzemmódot, mert az az egyszerűbb:
[3] PS C:\> $geoip.GetGeoIPContext()
ReturnCode : 1
IP : 81.183.172.25
ReturnCodeDetails : Success
CountryName : Hungary
CountryCode : HUN
[4] PS C:\> $geoip.GetGeoIP("213.214.215.216")
ReturnCode : 1
IP : 213.214.215.216
ReturnCodeDetails : Success
CountryName : Sweden
CountryCode : SWE
A GetGeoIPContext() metódus a saját gépemre vonatkozó adatokat írta ki, azaz hogy egy sikeres lekérdezés történt, az én IP címem 81.183.172.25 és én Magyarországon tartózkodom. A GetGeoIP() metódus meg tetszőleges IP címre adja meg ugyanezen adatokat, az én találomra begépelt címem épp svédországi.