Цитата:
Сообщение от
smailik
дальше все как Kabardian писал. Что бы я не запихивал в postData в infolog выводится
...
может в какой-то тонкости хитрость?
smailik, мой пример был всего лишь калькой x++ примера на c# , хотел показать что использовать .NET в AX не так страшно и можно отказаться от WinAPI. Конечно же, нужно чуть ближе ознакомиться с классом (на том же MSDN) и заточить под свой случай, протестировать, отладить, поиграться с разными параметрами. Если есть Visual Studio под рукой лучше сначала на c# проверять и получить работающий результат, а потом уже перевести код в x++.
Вот есть похожий на ваш пример сервис - если отправить запрос на
https://telenorcsms.com.pk:27677/cor...x&password=xxx, то он возвращает XML ответ, похожий на ваш:
X++:
<?xml version="1.0" encoding="UTF-8" ?>
<corpsms>
<command>Auth_request</command>
<data>Error 200</data>
<response>Error</response>
</corpsms>
Немного подправил джобик и получил точно такой же ответ в AX:
X++:
static void MicrosoftWebRequestSample(Args _args)
{
System.Net.WebRequest webRequest;
System.Net.ICredentials credentialCache;
System.Net.HttpWebResponse httpWebResponse;
System.IO.Stream stream;
System.IO.StreamReader streamReader;
str postData;
System.Byte[] byteArray;
System.Text.Encoding encodingUTF8;
str statusDescription;
str responseFromServer;
;
//1. Создать запрос.
webRequest = System.Net.WebRequest::Create("https://telenorcsms.com.pk:27677/corporate_sms2/api/auth.jsp?msisdn=xxxx&password=xxx"); //этот веб-сервис отправляет в ответ данные, которые были направлены ему.
webRequest.set_Method("POST");
//2. Ввести данные к отправке и ковертировать их в массив байтов
postData = ":27677/corporate_sms2/api/auth.jsp?msisdn=xxxx&password=xxx";
encodingUTF8 = System.Text.Encoding::get_UTF8();
byteArray = encodingUTF8.GetBytes(postData);
//3. Изменить свойства запроса: ContentType, ContentLength.
//webRequest.set_ContentType("application/x-www-form-urlencoded"); text/xml;charset=UTF-8
webRequest.set_ContentType("text/xml;charset=UTF-8");
webRequest.set_ContentLength(byteArray.get_Length());
//4. Если требуется авторизация, то указать учетные данные.
credentialCache = System.Net.CredentialCache::get_DefaultCredentials();
//5. Получить поток с данными.
stream = webRequest.GetRequestStream();
//6. Записать поток данных.
stream.Write(byteArray, 0, byteArray.get_Length());
//7. Закрыть поток.
stream.Close();
//8. Получить ответ.
httpWebResponse = webRequest.GetResponse();
//9. Отобразить статус.
statusDescription = httpWebResponse.get_StatusDescription();
info(strFmt("%1", statusDescription));
//10. Получить поток с данными.
stream = httpWebResponse.GetResponseStream();
//11. Открыть поток с помощью StreamReader.
streamReader = new System.IO.StreamReader(stream);
//12. Прочитать содержимое.
responseFromServer = streamReader.ReadToEnd();
//13. Вывести содержимое в инфолог.
info(strFmt("%1", responseFromServer));
//14. Закрыть все.
streamReader.Close();
stream.Close();
httpWebResponse.Close();
}