改进 OLE 自动化存储过程
Improve OLE Automation stored procedure
我有以下调用 Web API 方法的代码示例:
DECLARE @Object AS int;
DECLARE @ResponSEText AS Varchar(8000);
DECLARE @Token AS Varchar(8000);
DECLARE @xmltest AS Varchar(8000);
DECLARE @hResult AS int
DECLARE @source varchar(255), @desc varchar(255)
DECLARE @LocationId varchar(25);
DECLARE @Body AS varchar(8000) = '{
"UserName": "username",
"Password": "password"
}'
--EXEC sp_OACREATE 'MSXML2.XMLHTTP', @Object OUT;
EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'POST', 'https://urgentcargus.azure-api.net/api/LoginUser', 'false'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'application/json'
DECLARE @len int
SET @len = len(@body)
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Subscription-Key','23cb2410112b4c01bc397bcda0d18487'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Length', @len
EXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'Send', null, @body
EXEC sp_OAMethod @Object, 'responSEText', @ResponSEText OUTPUT
SELECT @Token=@ResponSEText
EXEC sp_OADestroy @Object
SET @Token ='Bearer '+ REPLACE(@Token,'"','')
PRINT @Token
在我的笔记本电脑(Win10,SQL Server 2017)上,我的响应不到一秒。然而,在客户的服务器(Windows Server 2012R2,SQL Server 2017)上使用的相同代码示例需要将近 21 秒才能获得响应,即使它 returns NULL
.
有什么我想念的吗?我猜它必须做一些与服务器设置相关的事情以及它如何在网络上运行。谢谢
服务器是通过代理出去还是直接出去?如果直接不使用任何代理,也许添加一个可能会有所帮助。我与 SQL
中的 Database Mail
有同样的问题,直到设置代理并添加端口 SQL
正在使用,我无法发送任何电子邮件。
我有以下调用 Web API 方法的代码示例:
DECLARE @Object AS int;
DECLARE @ResponSEText AS Varchar(8000);
DECLARE @Token AS Varchar(8000);
DECLARE @xmltest AS Varchar(8000);
DECLARE @hResult AS int
DECLARE @source varchar(255), @desc varchar(255)
DECLARE @LocationId varchar(25);
DECLARE @Body AS varchar(8000) = '{
"UserName": "username",
"Password": "password"
}'
--EXEC sp_OACREATE 'MSXML2.XMLHTTP', @Object OUT;
EXEC sp_OACREATE 'MSXML2.ServerXMLHttp', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'POST', 'https://urgentcargus.azure-api.net/api/LoginUser', 'false'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Type', 'application/json'
DECLARE @len int
SET @len = len(@body)
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Subscription-Key','23cb2410112b4c01bc397bcda0d18487'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Ocp-Apim-Trace:true'
EXEC sp_OAMethod @Object, 'SETRequestHeader', null, 'Content-Length', @len
EXEC sp_OAMethod @Object, 'SETRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'Send', null, @body
EXEC sp_OAMethod @Object, 'responSEText', @ResponSEText OUTPUT
SELECT @Token=@ResponSEText
EXEC sp_OADestroy @Object
SET @Token ='Bearer '+ REPLACE(@Token,'"','')
PRINT @Token
在我的笔记本电脑(Win10,SQL Server 2017)上,我的响应不到一秒。然而,在客户的服务器(Windows Server 2012R2,SQL Server 2017)上使用的相同代码示例需要将近 21 秒才能获得响应,即使它 returns NULL
.
有什么我想念的吗?我猜它必须做一些与服务器设置相关的事情以及它如何在网络上运行。谢谢
服务器是通过代理出去还是直接出去?如果直接不使用任何代理,也许添加一个可能会有所帮助。我与 SQL
中的 Database Mail
有同样的问题,直到设置代理并添加端口 SQL
正在使用,我无法发送任何电子邮件。