如何使用PowerShell调用ASP.NET WebMethod?

时间:2010-03-31 16:37:45

标签: asp.net powershell pagemethods

似乎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而不是出错的任何想法?

2 个答案:

答案 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();
....