改善OLE自动化存储过程

时间:2018-07-10 08:06:49

标签: sql-server ole

我有以下代码示例调用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)返回NULL时,也要花费将近21秒才能获得响应。

有什么我想念的吗?我猜想它必须在网络上做一些与服务器设置以及它的运行方式有关的事情。谢谢

1 个答案:

答案 0 :(得分:1)

服务器是通过代理还是直接通过?如果直接使用而不使用任何代理,则添加一个代理可能会有所帮助。我在Database Mail中使用SQL遇到了同样的问题,在设置代理并添加端口SQL之前,我无法发送任何电子邮件。