2014-06-09 8 views
5

Desidero poter inviare un messaggio JSON a un servizio REST. Sono in grado di fare una chiamata GET utilizzando esempi da google-ricercaCome posso passare un corpo dalla stored procedure a un servizio REST?

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 

ho provato diverse varianti della seguente:

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 

Il ResponseText torno è la omnious "{" Messaggio ":" si è verificato un errore "}"

qualcuno mi può punto nella giusta direzione per fare questo o semplicemente dare il modo corretto per farlo;)

ho usato la chiamata GET al mio URL. e ho ricevuto il giusto handelse dal servizio.

saluti Caroline

+0

Avete notato che 'false' tutta la strada a destra? dopo il commento "il tuo URL del servizio web". questo fa scattare il problema? – Ruskin

+0

Se cambio da falso a vero, ricevo invece una risposta NULL, ma ho comunque lo stesso errore sul lato server (dal registro di IIS POST/api/handelse/- 446 - XXXXXXXXXXX 500 0 0 203) – user3721971

+0

hai provato a eseguire il chiama dallo studio di gestione per vedere qual è l'errore? hai appena visto la tua modifica - buona cosa hai trovato il problema – Ruskin

risposta

6

soluzione di Caroline:

Un mio collega inciampato sulla soluzione

Invece di usare

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

abbiamo usato

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

Il risultato finale che ha registrato un handelse al nostro servizio si presenta come

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 

Spero che questo aiuti qualcun altro

saluti Caroline

Problemi correlati