[Powershell]在Powershell中呼叫Webservice

今天下班前,客戶來閒聊最近行內週邊系統發生的一個未知原因應用程式問題,問題發生在powershell呼叫webservice,自己以前沒試過從Powershell呼叫webservice,晚上刷好Apple Pay賺500哩之後來試試。

實驗的步驟分成兩個部分,分別是建立WebService以及從Powershell呼叫WebService。

 

建立WebService

1.新增一個VisualStudio網站專案: PS2Webservice,新增一支WebService程式: AirlinesService.asmx

2.新增兩個Web Method

第一個方法回傳常搭乘的航空公司;第二個方法輸入ISO國家別參數後,若為日本回傳1,000哩,其他回傳2,000哩。

[WebMethod]
public string[] GetAirlines()
{
    return new string[3] { "CI:中華航空", "BR:長榮航空", "CX:國泰航空" };
}


[WebMethod]
public int GetMiles(string Country)
{
    if (Country.Equals("JP"))
    {
        return 1000;
    }
    else
    {
        return 2000;
    }
}

3.啟動網站

AirlinesService

OK,Webservice環境準備好了,接下來寫powershell。

 


從Powershell呼叫WebService

1.打開Powershell ISE

2.輸入以下指令,先查詢取得服務內方法。

$service = New-WebServiceProxy -Uri "http://localhost:47991/Service/AirlinesService.asmx?WSDL"
$service | Get-Member -MemberType method

選取後,按F8執行,執行結果:

3.查看$service物件,還有智慧提示(Intellisense)可以選取方法

這次先查詢常搭乘的航空公司

F8執行,結果:

4.接下來試試要輸入參數的,同時指定class名稱:AirlinesService

$URI = "http://localhost:47991/Service/AirlinesService.asmx?WSDL"
$Prox = New-WebServiceProxy -Uri $URI -Class "AirlinesService"
$Prox.GetMiles("JP")

F8執行,結果:

5.跑簡單的迴圈及判斷式

For ($i = 1; $i -le 10 ;$i++) {
    if ($i -le 5)
    {
         $Prox.GetMiles("JP")
    }
    else
    {
         $Prox.GetMiles("")
    }
}

F8執行,結果:

 

客戶說明程式的流程是逐筆呼叫Webservice,powershell程式取回資料然後更新DB,當執行太快時會發生查無物件的異常(疑,印象中呼叫過多webservice有點可疑),但改成每筆之間等待0.5秒後,全數都可以正常過關。

目前收到的訊息還不足,姑且就是:

 

水星逆行: 

 

明天再和客戶厲害的.NET架構師一起討論。

 


參考:

New-WebServiceProxy cmdlet