У меня есть SOAP-API с WSDL (точнее, с множеством WSDL) и Basic-Auth с множеством методов - через этот API я могу управлять программным обеспечением, поэтому мне нужно проверить и обработать ответы, чтобы решить, какой из нихиспользовать дальше.У меня есть небольшой пример в php, который работает:
$wsdl = 'https//.....wsdl';
$parameter = Array(
'login' => "un",
'password' => "pw",
'soap_version' => ...,
'exceptions' => True,
'trace' => 0
);
$client = new SOAPClient($wsdl, $parameter);
$request_copy = array(
'parameters' => array(
'some_id' => '123',
'some_value' => '...'
),
);
$response_copy = $client->__soapCall("copy", $request_copy);
В C # я нашел в последние дни много подходов 1. Разбор информации вручную и отправка запросов вручную 2. Добавление ссылки на сервис вwsdl (в visual studio)
- Не вариант, потому что есть около 500 API-методов с множеством разных типов ответов и т. д.
- Идея звучит хорошо,но я не могу найти способ заставить его работать
У меня есть пустое консольное приложение с добавленной ссылкой на службу - пространство имен (называемое «ExampleNamespace») включает в себя все соответствующие классы (для одного wsdl), но я не могу найти способ отправить запрос.Я искал во всех классах (API-методы переводятся в классы в этом ExampleNamespace, если я правильно понял) и не смог ничего найти.
То, что я нашел, - это класс, называемый добавленной веб-ссылкой (ини один метод API не имеет такого имени) с членом ClientCredentials, который содержит имя пользователя, поэтому у меня есть:
ExampleNamespace.FoundClass soap = new ExampleNamespace.FoundClass();
soap.ClientCredentials.UserName.UserName = "un";
soap.ClientCredentials.UserName.Password = "pw";
Также я нашел на каком-то форуме подсказку, что app.config должен содержать что-то вроде следующегоработать с базовой аутентификацией
<security mode="Transport" >
<transport clientCredentialType="Basic" realm="">
<extendedProtectionPolicy policyEnforcement="Never" />
</transport>
</security>
В заключение: я не могу найти (полезный) способ сделать SOAP-реквест в c #, я не нашел ни одного примера или чего-либо действительно полезного.Если у кого-то есть подсказка, пример, решение или что-то еще, было бы очень полезно - на разных форумах много тем, но нигде нет хорошего собрания всех необходимых вещей
Спасибо