Как вызвать ASP.NET WebMethod с помощью PowerShell? - PullRequest
0 голосов
/ 31 марта 2010

Похоже, что 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, и не получить ошибку?

Ответы [ 2 ]

3 голосов
/ 31 марта 2010

Попробуйте еще раз прокси-подход, если вы действительно используете 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?

0 голосов
/ 25 апреля 2010

Доменик - я не большой пользователь PowerShell, но существенная проблема здесь:

«PageMethods» являются ScriptMethods и не предоставляют WSDL или любой другой вектор обнаружения, и поэтому вы должны POST с типом контента application/json с почтовыми данными, закодированными в коде, например начальная = [. net datetime строка urlencoded] & окончание = ..... JSON-кодировка ввода неверна.

Попробуйте использовать (HttpWebRequest) WebRequest.Create ...... вместо WebClient, из которого вам нужно будет создать класс для включения возможности изменения типа контента.

Например, вы можете использовать что-то вроде этого сценария и просто добавить аргумент типа контента (или просто жестко его кодировать), что-то вроде этого?

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

$req.ContentType = "application/json";

$res = $req.GetResponse();
....
...