web-dev-qa-db-ja.com

ストアドプロシージャからWebApi2エンドポイントを呼び出す

一部のレガシーSQLストアドプロシージャ(SQL Server 2008)は、私が提供したWebサービス(Web Api 2)から情報を取得する必要があります。

エンドポイントを(GETで)呼び出し、データ(JSON形式)を取得し、変換残りのsprocで使用するために一時テーブルで受信したデータを取得する方法は?

ありがとう

5
ff8mania

最善の方法は、 sed-defined CLR function を作成し、そこからWeb APIを呼び出すことです。これにより、C#および.Netライブラリの全機能を使用してWeb呼び出しを実行し、Jsonを解析できます。それについてはインターネット上にたくさんの情報があります。例: https://blogs.msdn.Microsoft.com/spike/2010/11/25/how-to-consume-a-web-service-from-within-sql-server-using-sql -clr / 。これは特にWebAPIに関するものではありませんが、そこからアイデアを得ることができます。

CLR関数を使用したカスタムアセンブリをSQLServerに展開する必要があることに注意してください。

編集

OLEオートメーション を使用してTSQLでそれを行う方法があります。例を参照してください ここ 、しかしそれははるかに難しく、文書化されておらず、CLR関数ですぐに使えるソリューションを使用する代わりに、おそらく自分の自転車を発明することに時間を費やすでしょう。

8
Vadim K.

CLRを書かなくても簡単にできます:

Declare @Object as Int;
Declare @ResponseText as Varchar(8000);

Code Snippet
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

このCLRストアドプロシージャを使用してみてください: SQL-APIConsumer

 exec  [dbo].[APICaller_POST]
       @URL = 'http://localhost:5000/api/auth/login'
      ,@BodyJson = '{"Username":"gdiaz","Password":"password"}'
0
Geraldo Diaz