Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将主体从存储过程传递到REST服务?_Sql_Json_Rest_Post - Fatal编程技术网

Sql 如何将主体从存储过程传递到REST服务?

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

我希望能够将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/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运行调用以查看错误是什么?刚刚看到你的编辑-幸好你发现了问题