Начало работы с soap клиентом веб-службы c# - PullRequest
0 голосов
/ 07 февраля 2020

Мой начальник спросил, сколько времени потребуется, чтобы создать клиент для доступа к веб-службе, которая будет отправлять и получать некоторые основные данные и встроенные документы. Просто начинаю играть с ним, чтобы посмотреть, что с этим связано. Я занимаюсь веб-разработкой и разработкой для настольных компьютеров около 20 лет, но буквально никогда не касался веб-службы, поэтому я нахожусь на крайнем уровне новичков.

До сих пор я использовал wsdl для создания ServiceReference1, и я я могу видеть методы в intellisense, но у меня нет первого понятия, с чего начать с вызова методов, передачи параметров и использования ответа. Я чувствую себя глупо, потому что уверен, что это довольно просто, но просто разбираюсь в коде и ищу примеры, которые ни к чему не привели. Обычно я могу найти что-то через гугл в течение нескольких минут, что точно на месте, но не повезло здесь. Был бы признателен пу sh в правильном направлении.

Итак, основные c вопросов. Правильный способ совершать звонки. Как и где выслать возвращенные данные. Как добавить параметры.

Вот моя первая попытка. Это получает простой список и не имеет параметров. Результат в fiddler возвращает данные, но есть ошибка несоответствия типов во время выполнения, которая, я думаю, вызвана некоторыми случайными символами, ведущими к ответу, которые, кажется, вызваны броском, что бы это ни было. Ответ начинается с 1ffs каждый раз, затем содержит остаток от xml. Во-вторых, мне нужно получить список в наборе данных или каком-либо другом контейнере, но я надеялся просто войти в код и увидеть результат

ServiceReference1.FilingInfoClient webservice = new FilingInfoClient();
        ServiceReference1.courtListRequest cr = new ServiceReference1.courtListRequest();
        ServiceReference1.courtListResponse lr = new ServiceReference1.courtListResponse();
        lr = webservice .getCourtList(cr);

Это по сути то же самое, но принимает параметр даты , Когда я запускаю эту фидлер, показывает, что параметр не отправляется. Других ошибок нет, но я уверен, только потому, что они взорвались сразу.

    ServiceReference1.FilingInfoClient webservice = new FilingInfoClient();
    ServiceReference1.messageListRequest mr = new ServiceReference1.messageListRequest();
    ServiceReference1.MessageListResponse mlr = new ServiceReference1.MessageListResponse();

    mr.latestMessagePullTimestamp = DateTime.Now.AddDays(-5);
    mr.endTimestamp = DateTime.Now;
    mlr.latestMessagePullTimestamp = DateTime.Now; 
    mlr = webservice.getMessageList(mr);

Это информация, предоставленная хостом веб-службы

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn1="urn:green:partner:ws:schema:FilingInfo">
<x:Header/>
<x:Body>
<urn1:getcourtList>
<urn1:courtListRequest/>
</urn1:getcourtList>
</x:Body>
</x:Envelope>

<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:urn1="urn:green:partner:ws:schema:FilingInfo">
<x:Header/>
<x:Body>
<urn1:getMessageList>
<urn1:messageListRequest>
<urn1:latestMessagePullTimestamp>?</urn1:latestMessagePullTimestamp>
</urn1:messageListRequest>
</urn1:getMessageList>
</x:Body>
</x:Envelope>

1 Ответ

0 голосов
/ 07 февраля 2020

у нас есть пары запросов и ответов для каждой операции в веб-сервисе. Думайте как запрос => вход, ответ => выход, операция => метод.

веб-сервис - это API. вещи, которые используют API, являются клиентами. WSDL описывает операции API и их запросы и ответы. такие инструменты, как visual studio, умеют читать WSDL и создавать код C# для выполнения этих (SOAP) внутренних операций. это клиент (здесь FilingInfoClient). Visual Studio также будет генерировать классы, представляющие каждый запрос и ответ.

это позволяет получить привычный опыт программирования. Вы вызываете метод, даете ему некоторый ввод, и он возвращает некоторый вывод.

using (var client = new FilingInfoClient())
{
    var request = new courtListRequest
    {
        //TODO fill in relevant properties
    };
    var response = client.getCourtList(request);
}
...