Delphi <-> c# Webservice SOAP Запрос с пропущенными значениями параметров - PullRequest
1 голос
/ 18 марта 2020

Мне нужно реализовать SOAP связь между клиентом в Delphi7 и. NET Webservice (ASMX). Я знаю, очень старые проекты / технологии.

Я написал веб-сервис, но автоматически созданный класс через WSDL Importer (на основе THTTPRIO) не работает должным образом, я не могу передать значения параметров в веб-сервис. Другими словами, метод в веб-сервисе вызывается, но все его параметры имеют значение по умолчанию. Я мог бы разобрать запрос xml, но raw xml недоступен в WebMethod. Надеюсь, мне просто не хватает атрибута метода. Любая идея?

Я использовал сетевой анализатор, чтобы убедиться, что параметры отправляются в сервис, это выглядит так:

POST /Lib/ASPX/WSService.asmx HTTP/1.1
SOAPAction: "WS/GetMessages"
Content-Type: text/xml
User-Agent: Borland SOAP 1.2
Host: localhost:54561
Content-Length: 480
Connection: Keep-Alive
Cache-Control: no-cache

<?xml version="1.0"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
<SOAP-ENV:Body SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<NS1:GetMessages xmlns:NS1="WS">
<id xsi:type="xsd:int">12345</id>
</NS1:GetMessages>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

И заголовок метода в веб-сервисе, который вызывается с параметром id = 0

[WebMethod]
public List<HelpDeskView> GetMessages(int id) 

1 Ответ

0 голосов
/ 19 марта 2020

Я нашел решение. В конце автоматически сгенерированного блока в разделе initialization отсутствовала эта строка:

InvRegistry.RegisterInvokeOptions(TypeInfo(Service1Soap), ioDocument);
...