2014-02-25 68 views
0

使用Powershell,我如何使用New-WebServiceProxy連接到WCF Web服務,並檢索包括cookie數據的響應標頭信息?除了使用New-WebServiceProxy之外,我已經搜索了網絡並找不到任何相關信息。Powershell WCF響應(標題和餅乾)

我現在的PS腳本看起來像......

$authSvc = New-WebServiceProxy –Uri ‘http://myserver/Services/AuthenticationService.svc?WSDL’ 

$LoginResults = $true 
$authSvc.Login('user1', 'abc123', $null, $true, $true, [ref] $LoginResults, [ref] $null) 

...似乎必須有額外的掛鉤插入新WebServiceProxy暴露出頭數據,但我似乎無法識別它。使用C#(只是一個測試控制檯應用程序),我已經能夠調用這個Web服務並檢索cookie數據,所以我知道該服務運行正常。

想法?

+1

也許你是路過參數的順序不正確?運行'$ authSvc.Login',它將返回_OverloadDefinitions_ – Raf

+0

感謝您的建議Raf。我嘗試過,發現沒有其他重載。我確定$ LoginResults總是錯誤的,因爲我使用了雙引號。我更新了我原來的問題,所以它有正確的單引號。 – barrypicker

+0

我已經瞭解到,單引號不會用$中的變量來解釋變量,而雙引號將會。我的測試密碼包含一個美元符號,所以它認爲它是一個空變量。 – barrypicker

回答

0

好的 - 我想我對自己的問題有一個答案。在這裏爲他人嘗試相同的事情。

訣竅是使用New-WebServiceProxy對象固有的CookieContainer對象。 CookieContainer中有一個CookieCollection。這個集合可以枚舉。在這個問題上我的例子闡述,我將展示如何暴露從Web服務調用返回的cookie信息...

$authSvc = New-WebServiceProxy –Uri ‘http://myserver/Services/AuthenticationService.svc?WSDL’ 
$authSvc.CookieContainer = New-Object System.Net.CookieContainer 

$LoginResults = $true 
$authSvc.Login('user1', 'abc123', $null, $true, $true, [ref] $LoginResults, [ref] $null) 

$CookieCollection = $authSvc.CookieContainer.GetCookies(‘http://myserver/Services/AuthenticationService.svc?WSDL’) 

foreach($cookie in $CookieCollection) 
{ 
    echo $cookie.Name 
    echo $cookie.Value 
} 

如果我使用該服務的獲取會員的方法...

$authSvc | Get-Member 

...然後我可以看到服務允許的所有暴露方法。 CookieContainer恰好是其中之一。暴露的其他相關特性(但不限於)...

  • ClientCertificates
  • 證書
  • RequestEncoding
  • SoapVersion
  • 網址
  • 的UserAgent