Показать сообщение отдельно
Старый 10.12.2014, 10:59   #27  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
Цитата:
Сообщение от 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();
}
За это сообщение автора поблагодарили: Logger (3).