ASP.NET, ASP.NET Core での WebAPI / Webサービス の実装 - ASP.NET

ASP.NET での WebAPI / Webサービス の実装について紹介します。

概要

IISのWebサーバーで ASP.NET を利用してWebAPIやWebサービスの実装の種類や方式についての紹介をします。
基本的にはWebでのレスポンスが返ればWebAPIになるため、極端な例では、テキストファイルやHTMLファイルでもWebAPIは作成できますが、動的でロジックを実装できる仕組みとしては以下の選択があります。

ASP.NET Core

MapGetによる実装

MapGetメソッドを利用して、APIのエンドポイントを実装する方法です。 実装手順の詳細はこちらの記事を参照してください。

コントローラーを利用した実装

ASP.NET Core MVCのコントローラーを利用した実装です。 実装手順の詳細はこちらの記事を参照してください。

ASP.NET

ASP.NET ページハンドラ (*.aspx)

ASP.NETのWebフォームページです。ページのUIコントロールを何も配置せず、OnLoadイベントにパラメーターを取得し戻り値を返す実装をすればWebAPIとして利用できます。SOAPなどのインターフェイスは自動で生成されないため、通信部分の処理は自前で実装する必要があります。

ASP.NET ハンドラ

ASP.NETハンドラを利用します。ASP.NETハンドラを利用して、直接XMLやJSONなどの構造化データを返却することができます。ASP.NETハンドラクラスの ProcessRequest メソッドにて、HttpRequest, HttpResponse オブジェクトを用いてパラメータの取得やレスポンスデータの作成などができます。ASP.NET ページハンドラと同様にSOAPなどのインターフェイスは自動で生成されないため、通信部分の処理は自前で実装する必要があります。
ASP.NETハンドラーの実装手順はこちらの記事を参照してください。

Web サービス ハンドラ (*.asmx)

asmxファイルを利用してSOAPのWebサービスを実装できます。最新のIISでは、WCFを利用して同様の機能が利用できるため、WCFが利用できない古いサーバーでの利用や過去のコードを利用する場合、互換性が必要な場合に利用します。新規開発の場合は、WCF Webサービスで同様の機能が実現できるため、WCFを利用するのがお勧めです。
しかし、2022年時のASP.NETのプラットフォームの状況では、WCFは.NET 5/6 に対応していないため、REST Web APIや.NET 6でREST Webサービスを構築する方針がよさそうです。
asmxファイルを利用したWebサービスハンドラの実装についてこちらの記事を参照してください。

WCF Webサービス (*.svc)

WCF(Windows Communication Foundation) を利用してWebサービスを実装できます。新しい機能ですので、Webサービスを新規に実装する場合はこちらを利用するのが良いかと思われます。IISのデフォルトのインストールオプションではWCFの機能はインストールされないため、IISに追加でWCFの機能をインストールする必要があります。 WCFを利用したWebサービスの実装手順はこちらの記事を参照してください。また、WCFを利用した場合JSON形式でのデータ送受信をするRESTインターフェイスを実装することもできます。WCFサービスでRESTインターフェイスの実装をする手順はこちらの記事を参照してください。

ジェネリック Web ハンドラ (*.ashx)

ジェネリック Webハンドラを利用してWebAPIを実装できます。汎用のHTTPハンドラのため、WebフォームやWebページを返さない実装にも利用できます。
ASP.NET ページハンドラやASP.NETハンドラと同様にインターフェイスは自動で生成されないため、通信部分の処理は自前で実装する必要があります。ジェネリックハンドラーの利用方法や実装コードの詳細はこちらの記事を参照してください。

ASP.NET Web API

ASP.NET MVCの機能を利用したWeb APIのためのフレームワークを利用した Web APIの実装方式です。現在の最新版は ASP.NET Web API 2 と呼ばれています。
ASP.NET MVCに似たルールでの実装となります。またAPIの戻り値はJSON形式がデフォルトになります。ASP.NET Web APIを利用したWeb APIの実装手順はこちらの記事を参照してください。

比較表

方式拡張子インターフェイス通信部の実装JavaScriptからの
呼び出し
補足
ASP.NET ページハンドラ*.aspxなし必要容易ページ/WebForm (HTML)を表示する仕組みのため不向き
ASP.NET ハンドラなし必要容易
Web サービス ハンドラ*.asmxSOAP,HTTP POST不要たいへんWCFの下位互換
WCF Webサービス*.svcSOAP不要たいへんWCFの機能をIISにインストールする必要あり
WCF Webサービス(REST I/Fを実装)*.svcREST必要容易WCFの機能をIISにインストールする必要あり、入出力をJSONフォーマットで指定する
ジェネリック Web ハンドラ*.ashxなし必要容易
ASP.NET Web APIなし不要容易
通信部の実装 : Windows Form アプリケーションから呼び出す場合に通信処理を実装する必要があるか。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2018-05-28
iPentec all rights reserverd.