Как я могу использовать System.Net.WebClient как PowerShell New-WebServiceProxy?

Проблема с подключением к службе через PowerShell по сравнению с использованием C# заключается в том, что служба ожидает ключ, переданный в заголовке.

я могу использовать new-WebServiceProxy с URI и передать ему учетные данные по умолчанию. Затем я могу получить ограниченный по времени сервисный ключ, но для последующих вызовов к сервису невозможно передать ключ, что приводит к ошибке, что действительный сервисный ключ отсутствует.

Я знаю, что командлет использует System.Net.WebClient класс, который имеет настраиваемое свойство заголовков, которое я хочу попробовать использовать. Я просто не могу заставить этот класс вести себя так же, как и командлет, и возвращать объект. Кто-нибудь знает как?

Это то, что я использую, но для реализации в.Net непосредственно из PowerShell:

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

Это командлет Powershell, который я использую для доступа к сервису. Я хотел бы сделать то же самое, используя:

$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

Если кто-то может помочь мне, как создать прокси-объект.

1 ответ

Похоже, что метод GetTimeLimitedServiceKey() взят из API QMSClient: 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

Другие вопросы по тегам