none
Ошибка при вызове XMLHTTP.SEND с OPEN("PUT",Url,False,User,Password) RRS feed

  • Вопрос

  • Здравствуйте!
     Я пишу код на VB с среде VS2010 Express.
     Код должен отправить запрос на заданный сервер методом "PUT". Работоспобность сервера (чужое приложение) проверена  скриптом VBS и кодом на VB6, (т.е. запросы отправляются, ответы приходят) на том же компьютере (Win XP SP-2), где ведется разработка кода.
    Суть проблемы : при выполнении метода ObjXMLHTTP.SEND(DATA) в среде VB VS2010 Express я получаю ошибку Err.Number=5 (Параметр задан неверно), Источник - msxml3.dll ( аналогично и с msxml6).
     Я опробовал различные вырианты типов аргумента DATA, и аргументов User и Password  в операторе ObjXMLHTTP.OPEN, в частности:
    1. DATA,  User,  Password  As String  --> Err.Number=5
    2. DATA As String,     User, Password  As IntPtr (использовал System.Runtime.InteropServices.Marshal.StringToBSTR(Arg As String) -->Err.Number=5.
    В вариантах 1 и 2, судя по логу сервера, передачи запроса не происходило.
    3. DATA As IntPtr в 4-х вариантах ...Marshal.StringToBSTR, StringToHGlobalAnsi(), StringToHGlobalUni(), StringToHGlobalAuto(). В этих вариантах метод SEND завершался без ошибки, однако на принимающем сервере возникала ошибка "Exception Error ProcessRequest: Access violation at address ... " (по логу сервера видно, что запрос принят). Из этого я делаю заключение, что на сервер поступили "не валидные" данные. Что конкретно поступило выяснить не представляется возможным. Согласно спецификации серверное приложение ожидает в DATA  xml текст в ANSI кодировке.

      Прошу пояснить как правильно передать значение DATA в метод SEND. 

    P.S.  Неоднократно  использовал объект "MSXML2.xmlhttp" для обмена данными.
     Впервые столкнулся с проблемой именно для метода обмена "PUT" с Login и Password. Может быть "косяк" не у меня?


    • Изменено Saven52 17 июня 2013 г. 15:59
    17 июня 2013 г. 15:33

Ответы

  • Если я правильно понял MSXML2 не является частью пакета .Net.

    Если так, то вопрос скорее к разработчикам MSXML2 ибо это специфическая проблема и мало вероятно, что кто то здесь знает ее решение.

    Если я не прав, поправьте меня.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    17 июня 2013 г. 18:07

Все ответы

  • Если я правильно понял MSXML2 не является частью пакета .Net.

    Если так, то вопрос скорее к разработчикам MSXML2 ибо это специфическая проблема и мало вероятно, что кто то здесь знает ее решение.

    Если я не прав, поправьте меня.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    17 июня 2013 г. 18:07
  • Уважаемый LXGDARK, полагаю, что Вы не правы. Поясню:
    1. MXXML2 - COM объект, имеющий свои классы, методы, параметры методов и спецификацию типов данных (свойств,параметров).
     Этот объект и его методы используются и могут использоваться любым приложением при условии соблюдения требований спецификации типов передаваемых объекту данных. Таким образом задача формирования аргументов в соответствии с спецификациями объекта - задача разработчика ПО или среды программирования.
    2.Известно, что пакет NET для хранения строковых данных и массивов использует иной способ распределения памяти и кодировкау, чем "ожидаемый" MXXML2. Т.е. использование "напрямую" строковых объектов среды NET в COM объекте без соответствующих преобразований (маршалинг) не возможно. Например, параметр, передаваемый в SEND, специфицируется As varBody. Такого типа  в среде NET не существует, но можно создать область памяти, содержащую информацию, соответствующую спецификации VarBody и передать ее методу.
    3.Мой положительный опыт использования SEND(String) с методом POST, по моему мнению, свидетельствует о том, что в этом случае "маршалинг" встраивался компилятором.
    Мое мнение: MSXML -  не виновен.
    Возвращаясь к теме вопроса - прошу помощи знатоков. 
    • Изменено Saven52 19 июня 2013 г. 13:54 Опечатка
    19 июня 2013 г. 13:43
  • То есть вы утверждаете, что проблема во взаимодействии .Net с COM MXXML2?

    Я не силен во взаимодействии с COM, не так часто надобно, поэтому не смогу тут помочь.

    Надеюсь после уточняющего ответа найдутся люди, которые смогут подсказать. В крайнем случае подскажут куда писать, что бы в следующей редакции .Net решили подобные проблемы.


    Женат на WPF. Тайно встречаюсь с WinRT. Не сложилось с C#!

    19 июня 2013 г. 13:55