Как вызвать операцию SOAP для определенного именованного порта WSDL?
Ранее при работе с вызовами SOAP веб-сервисов из PowerShell жизнь была легкой. Бежать $myProxy = New-WebServiceProxy -Uri 'https://example.com/some/web/service.aspx?wsdl'
, то все действия магически доступны на $myProxy
объект.
Однако недавно я согласился помочь в реализации быстрого сценария, который позволяет нам отправлять данные в веб-службы SII, подробно описанные здесь: 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
Непроизводственный веб-сервис, к которому я подключаюсь, должен быть: 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
Это работает и показывает доступные операции, но не дает указания о том, как я выбрал бы только ТЕСТ (SuministroFactEmitidasPruebas
) порт.
1 ответ
Я думал, что вы можете указать порт службы через class
атрибут:
$url = "http://www.thing.com/stuff.asmx?wsdl"
$proxy = New-WebServiceProxy `
-Uri $url `
-namespace ... `
-Class SuministroFactEmitidasPruebas
В противном случае, я думаю, что он выбирает первый порт, но не цитируйте меня по этому поводу. Надеюсь, это поможет.