0

似乎 ASP.NET WebMethods 不够“网络服务”,无法使用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)内部服务器错误。” 所以我一定是做错了什么。

关于如何PageMethod从 PowerShell 调用我的任何想法,并且不会出错?

4

2 回答 2

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 时遇到什么样的错误?

于 2010-03-31T16:59:28.753 回答
0

Domenic - 我不是 PowerShell 的大用户,但这里的突出问题是:

“PageMethods”是 ScriptMethods,不公开 WSDL 或任何其他发现向量,因此您必须使用带有 urlencoded 发布数据POST的内容类型application/json,例如,starting=[.net datetime string urlencoded]&ending=..... JSON 编码输入不正确。

尝试使用 (HttpWebRequest)WebRequest.Create...... 而不是 WebClient,您必须从中派生一个类才能更改内容类型。

例如,您可以使用类似这个脚本的东西,然后简单地添加一个内容类型参数(或者只是硬编码它),像这样?

....
$req = [System.Net.HttpWebRequest]::Create($url);

$req.ContentType = "application/json";

$res = $req.GetResponse();
....
于 2010-04-25T18:20:05.357 回答