如何像PowerShell New WebServiceProxy那样使用System.Net.WebClient?

如何像PowerShell New WebServiceProxy那样使用System.Net.WebClient?,.net,web-services,powershell,webclient,new-webserviceproxy,.net,Web Services,Powershell,Webclient,New Webserviceproxy,与使用C#相比,我通过PowerShell连接到服务时遇到的问题是,该服务需要在标头中传递密钥 我可以对URI使用newWebServiceProxy,并让它通过默认凭据。然后,我可以获取有时间限制的服务密钥,但是对于服务的后续调用,无法传递密钥,这会导致一个错误,即没有有效的服务密钥 我知道cmdlet使用的是System.Net.WebClient类,该类具有可设置的headers属性,我想尝试使用该属性。我似乎无法让该类以与cmdlet相同的方式运行并返回对象。有人知道怎么做吗 这是我正在

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

我可以对URI使用
newWebServiceProxy
,并让它通过默认凭据。然后,我可以获取有时间限制的服务密钥,但是对于服务的后续调用,无法传递密钥,这会导致一个错误,即没有有效的服务密钥

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

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

$QMSService=newWebServiceProxy-Urihttp://localhost:4799/QMS/Service -命名空间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

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

GetTimeLimitedServiceKey()方法似乎来自QMSClient API:

…这意味着,您需要直接引用该第三方API(新建对象、添加类型、添加类型w/p/invoke等),然后调用GetTimeLimitedServiceKey()


GetTimeLimitedServiceKey()方法似乎来自QMSCClient API:

…这意味着,您需要直接引用该第三方API(新建对象、添加类型、添加类型w/p/invoke等),然后调用GetTimeLimitedServiceKey()


它是一个web服务,因此使用新的webserviceproxy创建代理对象只需保持与服务本身的开放连接,但会生成一个供我使用的对象,使我能够访问所述服务的方法。我可以通过该对象获取密钥,但该cmdlet不允许我将头信息注入到对uri的post调用中。与.net等效的是,但我无法确定如何生成一个代理对象,使我能够访问PS cmdlet所使用的方法。$QMSService不只是入口点吗?你试过$QMSService | gm吗?要查看哪些属性/方法可用?我只是想弄清楚如何获得代理对象,就像新的webserviceproxy返回的一样,但使用system.net.webclient。我尝试对从system.net.webclient返回的对象执行gm,但我没有看到任何返回此类对象的方法。问题是.net中唯一名为“代理”的对象是一个类似于n 80/443网站过滤代理的代理。您所在的上下文(用于对远程API进行持久本地化调用的web服务提供程序)中使用的代理不存在于该cmdlet之外的同一上下文中。我找到的QLIKAPI示例。请参阅编辑后的答案,以获取通过对.NET webclient的非持久性调用使用hte cmdlet的示例。它是一个web服务,因此使用新的webserviceproxy创建代理对象只需保持与服务本身的开放连接,但会生成一个供我使用的对象,使我能够访问所述服务的方法。我可以通过该对象获取密钥,但该cmdlet不允许我将头信息注入到对uri的post调用中。与.net等效的是,但我无法确定如何生成一个代理对象,使我能够访问PS cmdlet所使用的方法。$QMSService不只是入口点吗?你试过$QMSService | gm吗?要查看哪些属性/方法可用?我只是想弄清楚如何获得代理对象,就像新的webserviceproxy返回的一样,但使用system.net.webclient。我尝试对从system.net.webclient返回的对象执行gm,但我没有看到任何返回此类对象的方法。问题是.net中唯一名为“代理”的对象是一个类似于n 80/443网站过滤代理的代理。您所在的上下文(用于对远程API进行持久本地化调用的web服务提供程序)中使用的代理不存在于该cmdlet之外的同一上下文中。我找到的QLIKAPI示例。有关在对.NET webclient的非持久调用上使用hte cmdlet的示例,请参见编辑的答案。
$service = New-WebServiceProxy -Uri http://someHost:4799/QMS/Service -Namespace QlikViewServer -Credential (get-credential)
$serviceKey = $service.GetTimeLimitedServiceKey()