Показать сообщение отдельно
Старый 09.12.2014, 00:23   #16  
Kabardian is offline
Kabardian
Талантливый разгвоздяй
Аватар для Kabardian
 
424 / 338 (12) ++++++
Регистрация: 14.12.2008
Адрес: Москва
Записей в блоге: 14
smailik, а почему именно WinInet? Этого класса даже нет в стандартной AX 2009, подозреваю у вас доработка/апгрейд класса с AX 3.0/4.0.

Вот то же самое, но используя сборки .NET и класс WebRequest:
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("http://httpbin.org/post"); //этот веб-сервис отправляет в ответ данные, которые были направлены ему.
    webRequest.set_Method("POST");
    
    //2. Ввести данные к отправке и ковертировать их в массив байтов
    postData = "url:/rest/2/authentication/createSession?account=ХХХ&login=ХХХ.dispatcher&password=ХХХ";
    encodingUTF8 = System.Text.Encoding::get_UTF8();
    byteArray = encodingUTF8.GetBytes(postData);
    
    //3. Изменить свойства запроса: ContentType, ContentLength.
    webRequest.set_ContentType("application/x-www-form-urlencoded");
    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();
}
Там тестовый веб-сервис, он в ответ сразу отправляет данные, отправленные ему. У меня сейчас работает, проверьте может решение подойдет.

Честно содрал пример у Microsoft отсюда: http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx.
За это сообщение автора поблагодарили: smailik (1).