使用MSXML2.ServerXMLHTTP与SQL Server状态,statusText和responseHeader均为null

问题描述 投票:0回答:1

我们长期以来一直在 SQL Server 中使用 MSXML2.ServerXMLHTTP。

最近它停止正常工作。

当我们执行以下代码时,我们不再收到状态、statusText 和 responseHeader。

这是一些示例代码:

DECLARE @ret INT,
    @postData NVARCHAR(4000) = '<?xml version="1.0" encoding="UTF-8"?><note><to>Bob</to><from>Betty</from><heading>Reminder</heading><body>Hello There</body></note>',
    @status NVARCHAR(32) ,
    @statusText NVARCHAR(32) ,
    @responseText NVARCHAR(MAX) ,
    @responseHeader VARCHAR(2000)


    DECLARE @token INT;
    EXEC @ret = sp_OACreate 'MSXML2.ServerXMLHTTP', @token OUT;
    IF @ret <> 0 RAISERROR('Unable to open HTTP connection.', 10, 1);

    DECLARE @url VARCHAR(255) = 'https://www.ibm.com' -- JUST DID THIS CAUSE IT WAS THE FIRST DOMAIN I THOUGHT OF

    EXEC @ret = sp_OAMethod @token, 'open', NULL, 'POST', @url, 'false';

    EXEC sp_OAMethod @token, 'setRequestHeader', NULL, 'Content-type', 'text/xml'
    EXEC sp_OAMethod @token, 'setRequestHeader', NULL, 'Accept', 'text/xml'
    EXEC sp_OAMethod @token, 'setRequestHeader', NULL, 'Accept-language', 'en-CA'

    EXEC @ret = sp_OAMethod @token, 'send', NULL, @postData;
    IF @ret <> 0
        BEGIN
            EXEC sp_OAGetProperty @token, 'status', @status;
            SELECT 'error' response, @status status
            EXEC @ret = sp_OADestroy @token;
            RETURN;
        END
    EXEC sp_OAGetProperty @token, 'readyState', @status;
    EXEC sp_OAGetProperty @token, 'status', @status;
    EXEC sp_OAGetProperty @token, 'statusText', @statusText;
    EXEC sp_OAMethod @token, 'getResponseHeader', @responseHeader;

    DECLARE @responseTable TABLE (response VARCHAR(MAX))
    INSERT INTO @responseTable (response)
    EXEC sp_OAGetProperty @token, 'responseText'
    SELECT TOP 1 @responseText=response FROM @responseTable


    EXEC @ret = sp_OADestroy @token;
    IF @ret <> 0 RAISERROR('Unable to close HTTP connection.', 10, 1);  
    SELECT  
        @status status, 
        @statusText statusText, 
        @responseText responseText, 
        @responseHeader responseHeader

只要执行代码,响应表应该有 Status、StatusText 和 ResponseHeader 值,但对我来说没有。

sql-server t-sql msxml6
1个回答
0
投票

愚蠢的我忘记了属性调用结束时的 OUT。

感谢 siggemannen。

© www.soinside.com 2019 - 2024. All rights reserved.