1

与使用 C# 相比,我通过 PowerShell 连接到服务的问题是该服务需要在标头中传递一个密钥。

我可以使用new-WebServiceProxyURI 并让它传递默认凭据。这样我就可以拿到限时服务密钥了,但是对于后续的服务调用,没有办法传递密钥,导致报错没有有效的服务密钥。

我知道 cmdlet 使用System.Net.WebClient该类,并且它有一个我想尝试使用的可设置 headers 属性。我似乎无法让该类以与 cmdlet 相同的方式运行并返回一个对象。有谁知道怎么做?

这就是我正在使用的,但可以直接从 PowerShell 在 .Net 中实现:

$QMSService = New-WebServiceProxy -Uri http://localhost:4799/QMS/Service -Namespace QlikViewServer -UseDefaultCredential

那是我用来访问服务的 Powershell cmdlet。我想使用以下方法完成相同的操作:

$Client = New-Object System.Net.WebClient
$Client.UseDefaultCredentials = $true
$Client.BaseAddress = "http://localhost:4799/QMS/Service"

我只是不知道如何使用 System.Net.WebClient 创建一个代理对象,让我可以访问该服务提供的所有成员。设置好之后,我可以获取 TimeLimitedServiceKey 并执行以下操作:

$ServiceKey = $ProxyObjectCreatedFromClient.GetTimeLimitedServiceKey()
$Client.Headers = "X-Service-Key", $ServiceKey

如果有人可以帮助我如何创建代理对象。

4

1 回答 1

0

GetTimeLimitedServiceKey() 方法似乎来自 QMSClient API: https ://help.qlik.com/en-US/qlikview-developer/12.1/apis/QMS%20API/html/2be1e405-a7e5-4a43-b1b6- 9540b23a6226.htm

...意思是,您需要直接引用该第三方 API(New-Object、Add-Type、Add-Type w/p/invoke 等),然后调用 GetTimeLimitedServiceKey()

$service = New-WebServiceProxy -Uri http://someHost:4799/QMS/Service -Namespace QlikViewServer -Credential (get-credential)
$serviceKey = $service.GetTimeLimitedServiceKey()

https://community.qlik.com/thread/143003

于 2017-06-06T17:21:57.773 回答