Sql 如何将主体从存储过程传递到REST服务?
我希望能够将json消息发布到REST服务。我能够通过使用谷歌搜索的例子来进行GET调用Sql 如何将主体从存储过程传递到REST服务?,sql,json,rest,post,Sql,Json,Rest,Post,我希望能够将json消息发布到REST服务。我能够通过使用谷歌搜索的例子来进行GET调用 Declare @Object as Int; Declare @ResponseText as Varchar(8000); Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; Exec sp_OAMethod @Object, 'open', NULL, 'get', 'http://www.webservicex.com/stockquote.asmx/G
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
Exec sp_OAMethod @Object, 'open', NULL, 'get',
'http://www.webservicex.com/stockquote.asmx/GetQuote?symbol=MSFT',
--Your Web Service Url (invoked) 'false'
Exec sp_OAMethod @Object, 'send'
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText
Exec sp_OADestroy @Object
我尝试了以下不同的变体:
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
DECLARE @hResult int
DECLARE @source varchar(255), @desc varchar(255)
declare @Body as varchar(8000) =
'{
"Subsystem": 1,
"Exception": "",
"Message": "I have done what you asked",
"Time": "2014-06-09T11:16:35",
"Attribute": { "Number of attempts": "0" }
}'
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'post',
'https://thecorrecturl:446/api/handelse/', 'false'
Exec sp_OAMethod @Object, 'setRequestHeader', null, 'Content-Type', 'application/json'
declare @len int
set @len = len(@body)
EXEC sp_OAMethod @Object, 'setRequestHeader', null, 'Content-Length', @len
Exec sp_OAMethod @Object, 'setRequestBody', null, 'Body', @body
EXEC sp_OAMethod @Object, 'send', null
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText
Exec sp_OADestroy @Object
我返回的响应文本是无所不在的“{”消息:“发生了错误。”}
有没有人能给我指出正确的方向来做这件事,或者给出正确的方法;)
我已经使用了对我的url的GET调用,并从服务中获得了正确的handelse
问候
卡罗琳卡罗琳的解决方案:
我的一位同事偶然发现了这个解决方案
而不是使用
Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT;
我们曾经
Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT;
在我们的服务中发布handelse的最终结果如下
Declare @Object as Int;
Declare @ResponseText as Varchar(8000);
Declare @Body as varchar(8000) =
'{
"Subsystem": 1,
"Exception": "",
"Message": "I have done what you asked",
"Time": "2014-06-09T11:16:35",
"Attribute": { "Number of attempts": "0" }
}'
Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT;
EXEC sp_OAMethod @Object, 'open', NULL, 'post','https://thecorrecturl:446/api/handelse/', 'false'
Exec sp_OAMethod @Object, 'setRequestHeader', null, 'Content-Type', 'application/json'
Exec sp_OAMethod @Object, 'send', null, @body
Exec sp_OAMethod @Object, 'responseText', @ResponseText OUTPUT
Select @ResponseText
Exec sp_OADestroy @Object
希望这对其他人有帮助
问候
卡罗琳布莱恩·凯瑞很好用。
我想让API密钥添加以下行
declare @apikey as nvarchar(32) = 'your api key';
..
/*after content-type*/
exec sp_OAMethod @object, 'setRequestHeader', null, 'ApiKey', @apikey
...
你有没有注意到一直在右边的
false
?在“您的web服务URL”注释之后。这会引发问题吗?如果我从false改为true,我会得到一个空响应,但服务器端仍然存在相同的错误(来自IIS日志POST/api/handelse/-446-xxxxxxxxx 500 0 0 203),您是否尝试从management studio运行调用以查看错误是什么?刚刚看到你的编辑-幸好你发现了问题