Как вызвать операцию 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

В противном случае, я думаю, что он выбирает первый порт, но не цитируйте меня по этому поводу. Надеюсь, это поможет.

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