在阅读下面的输出for a script to get the weather时,MemberType
会根据API
描述WSDL
?
更广泛的问题是,从PowerShell,我如何知道我可以调用哪些方法?而且,它们是如何被引用的?
具体来说,这个方法:
GetWeather Method string GetWeather(string CityName, string CountryName)
然而,当我尝试调用该方法时,我得到:Data Not Found
。为什么?调用该方法的正确方法是什么?我需要先调用另一种方法吗?
在Windows上使用.NET
,希望了解天气:
PS C:\Users\thufir>
PS C:\Users\thufir>
PS C:\Users\thufir> .\Desktop\ps\weather3.ps1
TypeName: WebServiceProxy.GlobalWeather
Name MemberType Definition
---- ---------- ----------
Disposed Event System.EventHandler Disposed(System.Object, System.EventArgs)
GetCitiesByCountryCompleted Event WebServiceProxy.GetCitiesByCountryCompletedEventHandler GetCitiesByCountryCompleted(System.Object, WebServiceProxy.GetCitiesByCountryCompletedEventArgs)
GetWeatherCompleted Event WebServiceProxy.GetWeatherCompletedEventHandler GetWeatherCompleted(System.Object, WebServiceProxy.GetWeatherCompletedEventArgs)
Abort Method void Abort()
BeginGetCitiesByCountry Method System.IAsyncResult BeginGetCitiesByCountry(string CountryName, System.AsyncCallback callback, System.Object asyncState)
BeginGetWeather Method System.IAsyncResult BeginGetWeather(string CityName, string CountryName, System.AsyncCallback callback, System.Object asyncState)
CancelAsync Method void CancelAsync(System.Object userState)
CreateObjRef Method System.Runtime.Remoting.ObjRef CreateObjRef(type requestedType)
Discover Method void Discover()
Dispose Method void Dispose(), void IDisposable.Dispose()
EndGetCitiesByCountry Method string EndGetCitiesByCountry(System.IAsyncResult asyncResult)
EndGetWeather Method string EndGetWeather(System.IAsyncResult asyncResult)
Equals Method bool Equals(System.Object obj)
GetCitiesByCountry Method string GetCitiesByCountry(string CountryName)
GetCitiesByCountryAsync Method void GetCitiesByCountryAsync(string CountryName), void GetCitiesByCountryAsync(string CountryName, System.Object userState)
GetHashCode Method int GetHashCode()
GetLifetimeService Method System.Object GetLifetimeService()
GetType Method type GetType()
GetWeather Method string GetWeather(string CityName, string CountryName)
GetWeatherAsync Method void GetWeatherAsync(string CityName, string CountryName), void GetWeatherAsync(string CityName, string CountryName, System.Object userState)
InitializeLifetimeService Method System.Object InitializeLifetimeService()
ToString Method string ToString()
AllowAutoRedirect Property bool AllowAutoRedirect {get;set;}
ClientCertificates Property System.Security.Cryptography.X509Certificates.X509CertificateCollection ClientCertificates {get;}
ConnectionGroupName Property string ConnectionGroupName {get;set;}
Container Property System.ComponentModel.IContainer Container {get;}
CookieContainer Property System.Net.CookieContainer CookieContainer {get;set;}
Credentials Property System.Net.ICredentials Credentials {get;set;}
EnableDecompression Property bool EnableDecompression {get;set;}
PreAuthenticate Property bool PreAuthenticate {get;set;}
Proxy Property System.Net.IWebProxy Proxy {get;set;}
RequestEncoding Property System.Text.Encoding RequestEncoding {get;set;}
Site Property System.ComponentModel.ISite Site {get;set;}
SoapVersion Property System.Web.Services.Protocols.SoapProtocolVersion SoapVersion {get;set;}
Timeout Property int Timeout {get;set;}
UnsafeAuthenticatedConnectionSharing Property bool UnsafeAuthenticatedConnectionSharing {get;set;}
Url Property string Url {get;set;}
UseDefaultCredentials Property bool UseDefaultCredentials {get;set;}
UserAgent Property string UserAgent {get;set;}
<NewDataSet>
<Table>
<Country>Netherlands</Country>
<City>Amsterdam Airport Schiphol</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Maastricht Airport Zuid Limburg</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>De Bilt</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Deelen</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Eindhoven</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Groningen Airport Eelde</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Gilze-Rijen</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>De Kooy</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Leeuwarden</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Rotterdam Airport Zestienhoven</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Soesterberg</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Twenthe</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Valkenburg</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Volkel</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Vlieland</City>
</Table>
<Table>
<Country>Netherlands</Country>
<City>Woensdrecht</City>
</Table>
<Table>
<Country>Netherlands Antilles</Country>
<City>Flamingo Airport, Bonaire</City>
</Table>
<Table>
<Country>Netherlands Antilles</Country>
<City>Hato Airport, Curacao</City>
</Table>
<Table>
<Country>Netherlands Antilles</Country>
<City>Roosevelt Airport Saint Eustatius</City>
</Table>
<Table>
<Country>Netherlands Antilles</Country>
<City>Juliana Airport, Saint Maarten</City>
</Table>
</NewDataSet>
Data Not Found
PS C:\Users\thufir>
我的脚本:
(New-Object System.Net.WebClient).Proxy.Credentials = [System.Net.CredentialCache]::DefaultNetworkCredentials
$url = "http://www.webservicex.net/globalweather.asmx?wsdl"
$webservicex = New-WebServiceProxy -Uri $url -namespace WebServiceProxy -Class GlobalWeatherSoap
$webservicex | gm
$webservicex.GetCitiesByCountry("Netherlands")
$webservicex.GetWeather("Netherlands","Woensdrecht")
答案 0 :(得分:2)
你基本上已经自己回答了这个问题。 Sub SOExample()
Dim DataSheet As Excel.Worksheet
Dim ws As Excel.Worksheet
Dim lastRow As Long
Dim i As Long
Dim dict As Object
Dim SheetName As String
Set dict = CreateObject("Scripting.Dictionary")
Set DataSheet = ThisWorkbook.Worksheets("Dataset")
lastRow = DataSheet.Cells(DataSheet.Rows.Count, "H").End(xlUp).Row
'Add existing sheets into the dictionary first
'in case a sheet already exists with that name
For Each ws In ThisWorkbook.Worksheets
dict.Add ws.Name, ws.Name
Next
'Loop the range and add new sheets
For i = 1 To lastRow
SheetName = DataSheet.Cells(i, 8).Value 'Column H is index 8
If Not dict.exists(SheetName) Then
dict.Add SheetName, SheetName
Set ws = ThisWorkbook.Worksheets.Add
ws.Name = SheetName
End If
Next
End Sub
向您展示了如何调用该方法。 Get-Member
。因此,您必须首先将CityName指定为字符串,然后将CountryName指定为字符串。
而不是GetWeather(string CityName, string CountryName)
,这将是$webservicex.GetWeather("Netherlands","Woensdrecht")
。
$webservicex.GetWeather("Woensdrecht","Netherlands")
输出显示,国家/地区和城市均有效。
输出GetCitiesByCountry
是网络服务的响应,即方法工作正常,但网络服务无法找到该城市的天气。您可以使用HTTP GET request验证您的浏览器。
不幸的是,似乎网络服务无法找到任何城市的天气。 Imo web服务坏了。 ;)