我们长期以来一直在 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 值,但对我来说没有。
愚蠢的我忘记了属性调用结束时的 OUT。
感谢 siggemannen。