2014-06-09 11 views
5

Ich möchte in der Lage sein, eine JSON-Nachricht an einen REST-Dienst zu senden. Ich bin in der Lage eine GET-Aufruf zu tun, indem sie Beispiele von Google-SucheWie kann ich einen Text von der gespeicherten Prozedur an einen REST-Dienst übergeben?

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 

Ich habe versucht, verschiedene Varianten der folgenden Verfahren:

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 

Die Response ich wieder die omnious ist „{“ Message „:“ Ein Fehler ist aufgetreten „}“

Kann jemand mich in die richtige Richtung weisen, dies zu tun oder einfach nur die richtige Art und Weise zu geben, es zu tun;)

ich die GET-Aufruf an meine uRL verwendet haben. und bekam den richtigen Handel aus dem Service.

Grüße Caroline

+0

Haben Sie hilft feststellen, dass 'false' den ganzen Weg auf der rechten Seite? nach dem Kommentar "your web service URL". löst das das Problem aus? – Ruskin

+0

Wenn ich von falsch auf wahr ändere, bekomme ich stattdessen eine NULL - Antwort, aber immer noch den gleichen Fehler auf der Serverseite (aus dem IIS - Protokoll POST/api/handelse/- 446 - XXXXXXXXXXX 500 0 0 203) – user3721971

+0

Anrufe von Management Studio, um zu sehen, was der Fehler ist? habe gerade deinen Schnitt gesehen - gut, dass du das Problem gefunden hast – Ruskin

Antwort

6

Carolines Lösung:

Ein Kollege von mir auf die Lösung gestoßen

Statt

Exec sp_OACreate 'MSXML2.XMLHTTP', @Object OUT; 

verwenden wir

verwendet
Exec sp_OACreate 'MSXML2.ServerXMLHTTP', @Object OUT; 

Das Endergebnis, das eine Händelse in unseren Dienst geschrieben sieht aus wie

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 

Hope this jemand anderes

Grüße Caroline

Verwandte Themen