В дополнение к предыдущим комментариям о нулевом завершении, вы также должны нести ответственность за то, что не переполнили свой собственный буфер. Он не останавливается на 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++;
}
Другими словами, обязательно прекратите принимать данные, когда максимальная длина будет достигнута, независимо от того, что среда пытается нажмите на вас.
Я могу воспроизвести ту же ошибку, когда сервис 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);
}
Ответ U / KetanChawda-MSFT достаточно хорош, если вы действительно можете изменить веб-сервис, но так как это было вне нашего контроля над этим, нам пришлось сделать что-то еще.
Мы создали отдельный пользовательский соединитель SOAP, только для этого одного метода, через который проходит SOAP.
Соединитель имеет один метод, настроенный следующим образом, с API-интерфейсом WCF по умолчанию:
В своем приложении логики вы можете создать переменную, содержащую весь 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-запрос решает эту проблему.