Создана справочная служба SOAP в.NET с использованием WSDL. Прокси-класс, похоже, не отображает ответ SOAP

77
6

Я пишу веб-службу в ASP.NET/C# (.NET 4.6, VS 2015), которая должна:

получать данные XML, проанализировать XML-данные, использовать проанализированные данные для вызова отдельной службы SOAP, получать ответ от службы SOAP, манипулировать ответом от службы SOAP и отправить обработанный XML обратно вызывающему приложению

Я признаю, что я новичок в написании веб-сервисов. 1-3. 5-6 будет тривиальным, поскольку я уже отправляю ответ типа Hello Hello обратно вызывающему приложению.

Я застрял в # 4. Конверт ответа кажется нигде не найден - нет ошибки при вызове внешней SOAP-службы, этот же SOAP-вызов с теми же данными отправляет ответ с использованием Fiddler и Postman, поэтому внешняя служба SOAP прекрасна.

Что касается №4, я добавил ссылку на службу к существующей службе SOAP. Я могу вызвать веб-службу, но при отладке и просмотре прокси-класса я не вижу никакого способа получить доступ к конверту ответа или что-либо в конверте ответа.

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

Нужно ли редактировать ссылку на службу для возврата данных? Если да, то как мне это сделать?

Извините за новый вопрос; Огромное спасибо заранее.

Резюме. Служба SOAP, с которой я звоню, работает и отвечает правильно, но я не могу найти, как реально извлекать данные из оболочки ответа SOAP; Я даже не вижу конверт ответа SOAP нигде при отладке. Я уверен, что мне не хватает чего-то очень простого.

EDIT: Вот некоторый код, запрошенный ранее с дальнейшим объяснением:

string fieldValue = _fieldPrefix + fieldContents + _fieldSuffix;  

ExternalSoapClient soapClient = new ExternalSoapClient(_endpointName);
soapClient.Execute(fieldValue);

ExecuteResponseBody responseBody = new ExecuteResponseBody();
string executeResult = responseBody.ExecuteResult;

Я предполагаю, что вопрос, который я задаю, таков: я совершенно уверен, что мне не хватает шага, связывающего ответ с исполнением. Метод SOAP называется "Выполнять" только с одним строковым полем, показанным выше.

спросил(а) 2021-01-25T17:27:28+03:00 4 месяца, 3 недели назад
1
Решение
108

Не совсем понятно, что вы пытаетесь выполнить в примере кода, но я думаю, что то, что вы ищете, выглядит примерно так:

string fieldValue = _fieldPrefix + fieldContents + _fieldSuffix;  

ExternalSoapClient soapClient = new ExternalSoapClient(_endpointName);
ExecuteResponseBody responseBody = soapClient.Execute(fieldValue);

string executeResult = responseBody.ExecuteResult;

Я бы ожидал, что Execute возвращает объект ExecuteResponseBody который представлен как класс в.NET framework. Свойство ExecuteResult в этом классе должно содержать значение, которое вы ищете.

В двух словах ваш код должен назначить ответ от службы объекту ExecuteResponseBody, а затем вы можете получить доступ к содержащимся в нем данным. Ваш текущий подход не подключает объект ExecuteResponseBody к результату служебного вызова - вы создаете новый объект после вызова (и ничего не делаете с результатом, полученным от вызова), поэтому данные, которые вы ищете, не будут быть во вновь созданном объекте.

ответил(а) 2021-01-25T17:27:28+03:00 4 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема