Клиент SOAP в C # из существующего php proofOfConcept - PullRequest
0 голосов
/ 05 декабря 2018

У меня есть 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)

  1. Не вариант, потому что есть около 500 API-методов с множеством разных типов ответов и т. д.
  2. Идея звучит хорошо,но я не могу найти способ заставить его работать

У меня есть пустое консольное приложение с добавленной ссылкой на службу - пространство имен (называемое «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 #, я не нашел ни одного примера или чего-либо действительно полезного.Если у кого-то есть подсказка, пример, решение или что-то еще, было бы очень полезно - на разных форумах много тем, но нигде нет хорошего собрания всех необходимых вещей

Спасибо

...