如何在特定的命名WSDL端口上调用SOAP操作?

时间:2018-07-26 13:32:06

标签: powershell soap wsdl new-webserviceproxy

以前,从PowerShell调用SOAP Web服务时,生活很简单。运行$myProxy = New-WebServiceProxy -Uri 'https://example.com/some/web/service.aspx?wsdl',然后在$myProxy对象上神奇地执行所有操作。

但是,我最近同意帮助实现一个快速脚本,该脚本使我们可以将数据发送到SII Web服务,在这里进行详细介绍:https://www.agenciatributaria.es/AEAT.internet/en_gb/Inicio/Ayuda/Modelos__Procedimientos_y_Servicios/Ayuda_P_G417____IVA__Llevanza_de_libros_registro__SII_/Ayuda_tecnica/Informacion_tecnica_SII/WSDL_de_los_servicios_web/WSDL_de_los_servicios_web.shtml

我要连接的非生产Web服务应为:https://www7.aeat.es/wlpl/SSII-FACT/ws/fe/SiiFactFEV1SOAP(即从上一个链接收到的发票)。但是,尝试连接到该URL失败。

我找到了一种解决方法,可以在其中使用URI https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl创建代理。但是,生成的代理不会给我期望的操作。查看底层的WSDL,似乎指定了多个端口。有些用于生产,另一种用于测试。我想确保只连接到测试服务。

问题

如何确保仅连接到测试服务?

即对于WSDL:https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl

...如何确保仅连接到端口SuministroFactEmitidasPruebas

我目前的代码

$uri = 'https://www2.agenciatributaria.gob.es/static_files/common/internet/dep/aplicaciones/es/aeat/ssii/fact/ws/SuministroFactEmitidas.wsdl'
$certificate = Get-Item -Path 'Cert:\CurrentUser\My\ABCDEF1234567890' #i.e. this points to the certificate in my certificate store using the thumbprint of the SII certificate
$proxy = New-WebServiceProxy -Uri $uri 
$proxy.ClientCertificates.Add($certificate)
$proxy.AllowAutoRedirect = $true

这有效并显示了可用的操作,但是没有说明如何仅选择TEST(SuministroFactEmitidasPruebas)端口。

1 个答案:

答案 0 :(得分:1)

我认为您可以通过class属性指定服务的端口:

$url = "http://www.thing.com/stuff.asmx?wsdl"
$proxy = New-WebServiceProxy `
  -Uri $url `
  -namespace ... `
  -Class SuministroFactEmitidasPruebas

否则,我认为它会选择第一个端口,但不要在此引用我的名字。希望有帮助。