以前从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:CurrentUserMyABCDEF1234567890' #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
(端口。
我想您可以通过class
属性指定服务的端口:
$url = "http://www.thing.com/stuff.asmx?wsdl"
$proxy = New-WebServiceProxy `
-Uri $url `
-namespace ... `
-Class SuministroFactEmitidasPruebas
否则,我认为它会选择第一个端口,但不要引用我的话。希望能有所帮助。