Пользовательский SOAP-соединитель Azure SOAP-REST с ошибкой приложений логики на дату

В дополнение к предыдущим комментариям о нулевом завершении, вы также должны нести ответственность за то, что не переполнили свой собственный буфер. Он не останавливается на 8 символах, потому что ваш код не останавливается! Вам нужно что-то вроде следующего (копирование на предложение Джереми):

#define DATA_LENGTH 8
#define BUFFER_LENGTH (DATA_LENGTH + 1)

char Buffer[BUFFER_LENGTH]; //holds the byte stream
int charPos=0;  //index to next character position to fill

while (charPos <= DATA_LENGTH  ) { //user input event has occured
    Buffer[i] = charInput;

    Buffer[i+1] = '\0';

    // Display a response to input
    printf("Buffer is %s!\n", Buffer);

    i++; 

}

Другими словами, обязательно прекратите принимать данные, когда максимальная длина будет достигнута, независимо от того, что среда пытается нажмите на вас.

0
задан ruffen 21 March 2019 в 18:51
поделиться

2 ответа

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

Я могу сделать эту работу, изменив поля ввода Datetime в Soap Service на string.

Неработающий код службы SOAP:

public string GetDaysBetweenDates(DateTime timefrom, DateTime timeto)
{
  double value = (timeto - timefrom).TotalDays;
  return string.Format("Difference is: {0}", value);
}

Рабочий код WSDL

public string GetDaysBetweenDates(string timefrom, string timeto)
{
  DateTime fromdate = DateTime.Parse(timefrom);
  DateTime toDate = DateTime.Parse(timeto);
  double value = (fromdate - toDate).TotalDays;
  return string.Format("Difference is: {0}", value);
}
0
ответ дан KetanChawda-MSFT 21 March 2019 в 18:51
поделиться

Ответ U / KetanChawda-MSFT достаточно хорош, если вы действительно можете изменить веб-сервис, но так как это было вне нашего контроля над этим, нам пришлось сделать что-то еще.

Мы создали отдельный пользовательский соединитель SOAP, только для этого одного метода, через который проходит SOAP.

Соединитель имеет один метод, настроенный следующим образом, с API-интерфейсом WCF по умолчанию:

  1. Url - http: //hostname/Service1.svc/SoapPassThrough
  2. Добавьте два пользовательских заголовка: text / xml Content-Type и имя метода SOAPAction (наш: http://tempuri.org/IService1/methodname где tempuri - пространство имен
  3. Установите для тела значение {} (Пустой объект JSON)

В своем приложении логики вы можете создать переменную, содержащую весь XML для стандартного запроса Soap. Я использовал SOAP UI для создания SOAP запрос и просто вставить в XML из сгенерированного запроса. Эта переменная может использоваться как тело в приложении логики, когда вы используете службу.

Этот ресурс может быть полезен для этого: https: // blogs.msdn.microsoft.com/david_burgs_blog/2018/05/03/friendlier-soap-pass-through-with-logic-app-designer-ux/

Из того, что мы пришли к выводу, это Кажется, что пользовательский соединитель на самом деле отправляет строковый тип данных вместо datetime. Похоже, что сам XML-запрос решает эту проблему.

0
ответ дан ruffen 21 March 2019 в 18:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: