【问题标题】:Powershell WCF Response (Headers and Cookies)Powershell WCF 响应(标头和 Cookie)
【发布时间】:2014-02-26 09:24:22
【问题描述】:

使用 Powershell,我如何使用 New-WebServiceProxy 连接到 WCF Web 服务,并检索包括 cookie 数据在内的响应标头信息?我在网上搜遍了,除了放弃使用 New-WebServiceProxy 之外,找不到任何相关信息。

我当前的 PS 脚本看起来像...

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

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

... 似乎 New-WebServiceProxy 中必须有额外的钩子来公开标头数据,但我似乎无法识别它。使用 C#(只是一个测试控制台应用程序),我已经能够调用此 Web 服务并检索 cookie 数据,因此我知道该服务运行正常。

想法?

【问题讨论】:

  • 也许您传递参数的顺序不正确?只运行$authSvc.Login,它将返回 OverloadDefinitions
  • 感谢 Raf 的建议。我试过了,没有发现其他重载。我确定 $LoginResults 总是错误的,因为我使用了双引号。我已经更新了我原来的问题,所以它有正确的单引号。
  • 我了解到单引号不会解释带有 $ 的变量,而双引号会。我的测试密码包含一个美元符号,所以它认为它是一个空变量。

标签: wcf powershell cookies


【解决方案1】:

好的 - 我想我对自己的问题有一个答案。放在这里以供其他尝试相同事情的人使用。

诀窍是使用 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
}

如果我使用服务的 Get-Member 方法...

$authSvc | Get-Member

...然后我可以看到服务允许的所有公开方法。 CookieContainer 恰好是其中之一。其他暴露的相关属性是(但不限于)...

  • 客户证书
  • 凭据
  • 请求编码
  • 肥皂版本
  • 网址
  • 用户代理

【讨论】:

    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2022-07-20
    • 1970-01-01
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 2019-06-01
    • 1970-01-01
    相关资源
    最近更新 更多