Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CLR sp_OAGetProperty @xhr, 'responseXML.xml' возвращает NULL  [new]
Platonyan
Member

Откуда:
Сообщений: 29
Добрый день, прошу помочь разобраться почему мне возвращает NULL. В скрипте используемая ссылка к сожалению вам не доступна. В результате при правильной работе мне должно возвращать

<ROWDATA type="Bank_LogIn_Answer">
<ReqID>
<![CDATA[ A-13546 ]]>
</ReqID>
<Response>
<![CDATA[ OK ]]>
</Response>
<SID>
<![CDATA[ 5chb54ngiiq483482bnut4bj35 ]]>
</SID>
</ROWDATA>

место NULL
------------------------------------------------------------------------------------------------------------------------
DECLARE @URI varchar(400)
DECLARE @requestBody xml
DECLARE @xhr INT,@hr INT,@httpStatus INT,@msg VARCHAR(255)

IF OBJECT_ID('tempdb..#xml') IS NOT NULL DROP TABLE #xml
CREATE TABLE #xml ( yourXML XML )


EXEC @hr = sp_OACreate 'MSXML2.ServerXMLHTTP', @xhr OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @xhr

set @URI='https://login.test.ru/acratest/soap_server_test/cb_soap_service.php'

EXEC @hr = sp_OAMethod @xhr, N'open', NULL, 'POST', @URI, false
IF @hr <> 0 EXEC sp_OAGetErrorInfo @xhr

set @requestBody='<ROWDATA type="Bank_LogIn"><ReqID>A-13546</ReqID><User>test_user</User><Password>123456</Password></ROWDATA>'

EXEC @hr = sp_OAMethod @xhr, 'Send', NULL, @requestBody
IF @hr <> 0 EXEC sp_OAGetErrorInfo @xhr

EXEC @hr = sp_OAGetProperty @xhr, 'status', @httpStatus OUT
IF @hr <> 0 EXEC sp_OAGetErrorInfo @xhr

INSERT #xml ( yourXML )
EXEC @hr = sp_OAGetProperty @xhr, 'responseXML.xml'
IF @hr <> 0 EXEC sp_OAGetErrorInfo @xhr

select * from  #xml

EXEC @hr = sp_OADestroy @xhr


К сообщению приложен файл. Размер - 36Kb
18 июл 13, 14:05    [14583730]     Ответить | Цитировать Сообщить модератору
 Re: CLR sp_OAGetProperty @xhr, 'responseXML.xml' возвращает NULL  [new]
Mnior
Member

Откуда: Кишинёв
Сообщений: 6724
- Ещё один ласапедо-строитель.

Platonyan
EXEC @hr = sp_OAGetProperty @xhr, 'responseXML.xml'
Вы предположили что можно в названии свойства класса писать сложные языковые конструкции (какого языка кстати?).
1. Почему вы не думаете что предположение может быть неверным?
2. А почему вы не пишите так:
EXEC @hr = sp_OAGetProperty @xhr, 'responseXML->xml'
-- Или так
EXEC @hr = sp_OAGetProperty @xhr, '(responseXML as XDocument)->xml'

И тут на форуме так много примеров.

К тому же:
- тип XML не поддерживается OLE Automation.
- поддерживается до 8К байт в переменной, а INSERT EXEC очень глючен и необходимо контролить размер ответа через SET TEXTSIZE (подробности)
Так что засовывайте текст, а не XML, а далее уже преобразуйте.
18 июл 13, 15:39    [14584606]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить