似乎ASP.NET WebMethods不是“web servicey”,足以与New-WebServiceProxy
一起使用。或者也许是,我还没想出如何初始化它?
相反,我尝试手动完成,如下:
$wc = new-object System.Net.WebClient
$wc.Credentials = [System.Net.CredentialCache]::DefaultCredentials
$url = "http://www.domenicdenicola.com/AboutMe/SleepLog/default.aspx/GetSpans"
$postData = "{`"starting`":`"\/Date(1254121200000)\/`",`"ending`":`"\/Date(1270018800000)\/`"}"
$result = $wc.UploadString($url, $postData)
但是这给了我“远程服务器返回错误:(500)内部服务器错误。”所以我必须做一些稍微错误的事情。
有关如何从PowerShell调用PageMethod
而不是出错的任何想法?
答案 0 :(得分:3)
如果确实使用了WebMethod,请再次尝试使用代理方法。如果是这样,则URL资源应具有扩展名.asmx
,但您的显示您正在使用标准ASP.NET页面.aspx
。
代理简化了WebMethod的使用,例如:
C:\PS>$URI = "http://www.webservicex.net/uszip.asmx?WSDL"
C:\PS> $zip = New-WebServiceProxy -uri $URI -na WebServiceProxy -class ZipClass
当您尝试使用New-WebServiceProxy时会遇到什么样的错误?
答案 1 :(得分:0)
Domenic - 我不是PowerShell的大用户,但这里的突出问题是:
“PageMethods”是ScriptMethods并且不公开WSDL或任何其他发现向量,因此您必须POST
使用内容类型application/json
并对帖子数据进行urlencoded,例如starting = [.net datetime string urlencoded]& ending = ..... JSON编码输入不正确。
尝试使用(HttpWebRequest)WebRequest.Create ......而不是WebClient,您必须从中派生一个类以启用更改内容类型。
例如,您可以使用类似this script的内容,只需添加一个内容类型参数(或者只是硬编码),就像这样?
....
$req = [System.Net.HttpWebRequest]::Create($url);
$req.ContentType = "application/json";
$res = $req.GetResponse();
....