2010-03-31 7 views
0

Il semble que les WebMethods ASP.NET ne soient pas suffisamment "web servicey" pour fonctionner avec New-WebServiceProxy. Ou peut-être, et je n'ai pas compris comment l'initialiser?Comment appeler un WebMethod ASP.NET à l'aide de PowerShell?

Ainsi, au lieu, j'ai essayé de le faire manuellement, comme ceci:

$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) 

Mais cela me donne « Le serveur distant a retourné une erreur: (500) Erreur interne du serveur. » Je dois donc faire quelque chose qui ne va pas.

Des idées sur comment appeler mon PageMethod à partir de PowerShell, et ne pas obtenir une erreur?

Répondre

3

Essayez à nouveau l'approche proxy si vous utilisez un WebMethod. Si tel est le cas, la ressource URL doit avoir l'extension .asmx, mais votre montre que vous utilisez une page ASP.NET standard .aspx.

Une procuration simplifie l'utilisation d'un WebMethod un peu .: par exemple

C:\PS>$URI = "http://www.webservicex.net/uszip.asmx?WSDL" 

C:\PS> $zip = New-WebServiceProxy -uri $URI -na WebServiceProxy -class ZipClass 

Quelle sorte d'erreur que vous obtenez lorsque vous essayez d'utiliser Nouveau-WebServiceProxy?

+0

Je n'ai pas d'ASMX, car j'ai simplement décoré une méthode dans mon code-behind avec '[WebMethod]'. C'est-à-dire, il y a SleepLog/Default.aspx, puis dans SleepLog/Default.aspx.cs, il y a un 'WebMethod'. Lorsque j'essaie d'utiliser 'New-WebServiceProxy', j'obtiens donc, de façon prévisible," Le document HTML ne contient pas d'informations de découverte de service Web. " – Domenic

+0

@Domenic, pourquoi ne pas créer un service Web approprié. C'est aussi simple que d'hériter de 'System.Web.Services.WebService'. Ensuite, 'New-WebServiceProxy' devrait fonctionner comme Keith l'a suggéré dans sa réponse devrait-être acceptée. – stej

+0

Comme je ne fournis pas vraiment de service, la sémantique des services Web semble inappropriée ici. Je cherche juste un moyen d'obtenir les résultats d'un appel POST spécifique, qui est implémenté en tant que 'WebMethod' dans une page de code-behind. Pour ma question, la réponse acceptée serait «voici comment faire ça» ou «ce n'est pas possible, et voici pourquoi». – Domenic

0

Domenic - Je ne suis pas un grand utilisateur de PowerShell, mais la question saillant ici est:

« PageMethods » sont ScriptMethods et ne pas exposer un WSDL ou tout autre vecteur de découverte et en tant que tel, vous devez POST avec un contenu -type application/json avec les données de poste urlencoded par exemple start = [.net datetime string urlencoded] & ending = ..... Le codage JSON de l'entrée est incorrect. Essayez d'utiliser (HttpWebRequest) WebRequest.Create ...... au lieu de WebClient, à partir de laquelle vous devez dériver une classe pour activer la modification du type de contenu.

Par exemple, vous pouvez utiliser quelque chose comme this script et simplement ajouter un argument de type de contenu (ou tout simplement le coder en dur), quelque chose comme ça?

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

$req.ContentType = "application/json"; 

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