ASP.NETでWebサービスを作成する (前編)

やりたいこと

ASP.NETでかんたんなWebサービスを作成して、デスクトップアプリからアクセスしてみる。
(Visual Studioと「.NETデスクトップ開発」はインストール済みとする。)

(1) 準備

Visual Studio Installer で、「ASP.NETとWeb開発」をインストールする。

また、Visual Studio の「拡張機能」→「拡張機能の管理」で「Microsoft Vosual Studio Installer Projects」をインストールしておく。

また、今回はローカルホストをWebサーバとして動作確認するので、ローカルにIISをインストールしておく。

(2.1) ASP.NETのプロジェクト作成

Visual Studio で、新しいプロジェクトの作成で「ASP.NET Webアプリケーション」を選択。

テンプレートは「空」を選択。

適当な名前でプロジェクトを作成する。今回は WebAppHoge という名前にした。

(2.2) Webサービス(asmx)の作成

「プロジェクト」→「新しい項目の追加」で「Webサービス(ASMX)を選択」し、適当な名前を付けて追加。今回はWebServiceHoge.asmxという名前にした。

すると、WebServiceHoge.asmx.cs というソースが生成される。ここには HelloWorld() というサンプルの WebMethod が実装されている。

    [WebMethod]
    public string HelloWorld()
    {
      return "Hello World";
    }

既定ではWebサービス名前空間(Namespace) が http://tempuri.org/ になっているので、一意の名前空間に変更する。名前空間はURLの形式にするが、必ずしも実際のURLと一致している必要はない。また、ドメイン名の後にディレクトリがあると403エラーになることがある。

    [WebService(Namespace = "http://WebAppHoge.lipoyang.net/")]

プロジェクトを実行 (F5) すると、ブラウザ上で動作確認できる。(見れば分かるので解説は省略)

(2.3) WebMethodの追加

引数をとるWebMethodを追加してみる。

    [WebMethod]
    public string ToUpper(string input)
    {
        return input.ToUpper();
    }

プロジェクトを実行 (F5) すると、ブラウザ上で動作確認できる。(見れば分かるので解説は省略)

(2.4) インストーラ作成の前に

「ツール」→「NuGet パッケージマネージャー」→「パッケージ マネージャー コンソール」で下記のコマンドを実行しておく。

Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform

これにより、\bin\roslyn ディレクトリが生成されなくなる。そうしておかないと後述の手順でIISWebサービスをデプロイしてブラウザからアクセスしたときに「'~~~/csc.exe' の一部が見つかりませんでした。」といったエラーが出る。詳細は下記の記事を参照。

(2.5) インストーラ(WebSetup)の作成

サービスのデプロイにはVisual Studioの「発行」の機能を利用することが多いが、ここではインストーラを作成することにする。

ソリューションに「追加」→「新しいプロジェクト」で、「Web Setup Project」を選択。プロジェクト名は WebSetup としておく。

WebSetupプロジェクトに「Add」→「プロジェクト出力」で、WebAppHoge の「プライマリ出力」と「コンテンツファイル」を追加する。

また、WebSetupプロジェクトのプロパティで、「ProductName」と「Title」の既定値が WebSetup になっているので、WebAppHoge に変更する。

また、仮想ディレクトリ名も既定値が WebSetup になっているが、これの変更方法は少しややこしい。まず、WebSetupプロジェクトを選択し、「表示」→「Editor」→「ファイルシステムで File System (WebSetup) を開き、「Web Application Folder」のプロパティの「VirtualDirectory」を WebSetup から WebAppHoge に変更する。

プロジェクトをビルドすると、WebSetup.msi および setup.exe ができる。

(2.6) Webサービスのデプロイ

作成したインストーラを実行するとWebサーバ(IIS)にWebサービスをデプロイできる。今回はローカルのIISWebサービスをデプロイする。

ブラウザでWebサービスのURLにアクセスして動作を確認する。
http://localhost/WebAppHoge/WebServiceHoge.asmx

【参考】