VBでASP.net WebAPIを作る
「ASP.net+VBでWebApiを作りたい。WebApiは呼ばれたらバッチを実行し、バッチ処理が完了した後にレスポンスを返してほしい。レスポンスは何でもよい。」とリクエストを受けたので、作ってみました。
WebApiの作り方は、下記の記事内容を引用させて頂きます。
本記事は、ほとんど上記記事のコードをVBでやってみただけの記事になります。
プロジェクトを作る
空のASP.netプロジェクトを作成します。
NuGetで「Microsoft ASP.NET Web API 2 Web Host」を追加
本記事ではv5.2.3を利用しました。
Global.asaxの追加
プロジェクトを右クリックし、「追加」→「新しい項目を追加」を選択し、ダイアログで「Web」→「グローバル アプリケーション クラス」を選択。
作成された「Global.asax」を開き、下記のようにコードを追加します。
Imports System.Web.SessionState '追加ここから Imports System.Web.Http '追加ここまで Public Class Global_asax Inherits System.Web.HttpApplication Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) ' アプリケーションの起動時に呼び出されます '追加ここから GlobalConfiguration.Configure( Sub(config) config.Routes.MapHttpRoute("DefaultApi", "api/{controller}/{id}", New With {.id = RouteParameter.Optional}) End Sub) '追加ここまで End Sub … End Class
ControllerフォルダとControllerクラスの追加
プロジェクトを右クリックし、「追加」→「新しいフォルダー」でフォルダを追加、名前を「Controller」に変更します。 「Controller」フォルダを右クリックし、「追加」→「クラス」でクラスを追加する、名前は「ExecBatchController」とします。
メソッドの実装
ExecBatchControllerを下記のように書き換えます。 なお、C#ではGetのWebAPIを作成する場合「Get」とするが、VBでは「Get」が予約語であるため、「GetValues」とします。
Imports System.Web.Http Public Class ExecBatchController Inherits ApiController Public Function GetValues() As String 'バッチを実行(test.batはtimeout 20を実行する) Dim p As System.Diagnostics.Process = System.Diagnostics.Process.Start("C:\\test\\test.bat") p.WaitForExit() '適当な値を返す Return "end process" End Function End Class
実行
実行すると、ブラウザにはエラーが表示されるが、WebAPIは起動しています。
ブラウザのアドレスバーに「http://localhost:(ポートNo)/api/ExecBatch」と入力すると、バッチが実行されます。
バッチ終了後、"end process"と文字列が返されます。