2010-03-31 83 views
0

似乎ASP.NET WebMethods不是「web服務」,不足以與New-WebServiceProxy一起使用。或者,也許是,我還沒有想出如何初始化它?如何使用PowerShell調用ASP.NET WebMethod?

所以不是,我試圖做手工,像這樣:

$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並沒有出現錯誤的任何想法?

回答

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 

什麼樣的錯誤你好嗎當您嘗試使用新WebServiceProxy?

+0

我沒有ASMX,因爲我用'[WebMethod]'在我的代碼後面簡單地裝飾了一個方法。也就是說,有SleepLo​​g/Default.aspx,然後在SleepLo​​g/Default.aspx.cs中有一個'WebMethod'。 當我嘗試使用New-WebServiceProxy時,我可以預見到:「HTML文檔不包含Web服務發現信息。」 – Domenic 2010-03-31 17:19:29

+0

@Domenic,你爲什麼不創建適當的網絡服務。這與從System.Web.Services.WebService繼承一樣簡單。然後'New-WebServiceProxy'應該像Keith在他應該被接受的答案中所建議的那樣工作。 – stej 2010-03-31 18:27:02

+0

因爲我沒有真正提供服務,所以網絡服務語義在這裏看起來不合適。我只是想找到一種方法來獲得特定POST調用的結果,這恰好在代碼隱藏頁面中實現爲'WebMethod'。對於我的問題,接受的答案是「這是怎麼做到的」或「這不可能,這就是原因。」 – Domenic 2010-04-01 02:50:41

0

Domenic - 我不是一個大的Powershell用戶,但在這裏的突出問題是:

「PageMethods」是ScriptMethods和不公開WSDL或任何其他發現矢量,因此你必須POST與內容類型application/json,具有urlencoded的發佈數據開始= [.net日期時間字符串urlencoded] &結束= .....對輸入的JSON編碼不正確。

嘗試使用(HttpWebRequest)WebRequest.Create ......而不是WebClient,您將不得不派生類以啓用更改內容類型。

例如,你可以使用類似this script的東西,並簡單地添加一個內容類型參數(或者只是硬編碼它),像這樣?

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

$req.ContentType = "application/json"; 

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