WebAPIの効果的な使用:セルフホスティングRESTサービス

ASP.NET WebAPIのリリースにより、開発者はRESTの原則を完全に実装し、ASP.NETプラットフォームの全機能を使用して、便利な方法でRESTサービスを迅速に作成できます。



WebAPIの機能とアプリケーションについては、すでにかなり多くの記事が執筆されています。たとえば、ApiExplorerを使用して、自己文書化 APIサービスの興味深い機能について学ぶことができます。



WebAPIには別の優れた機能がありますが、これについてはあまり説明されていません。これは、WebAPIが独立したホスティングサービス(セルフホスティング)を提供する機能です。 この記事では、例を使用してWebAPIに基づいてRESTセルフホスティングサービスを作成および実行する方法を説明します。



セルフホスティングRESTサービス



サービスAPIへのアクセスを提供するために、IISサーバーに基づいてサービスAPIを展開することが常に推奨されるとは限りません。 サービスがWebアプリケーションの一部ではない場合、独自のインフラストラクチャに基づいて実行することは理にかなっています。



セルフホスティングメカニズムを使用する別のオプションは、IISサーバーを含まないプラットフォームでサービスを起動したり、IISの起動が複雑または不要なプラットフォームでサービスを起動したりすることです。



何らかの方法で、WebAPIを使用すると、WebサーバーにWebアプリケーションをインストールせずにアクセスできるIISに依存しないサービスを作成できます。



コンソールアプリケーション内のサービス



コンソールアプリケーションの最も単純な例で、セルフホスティングの機能を検討してください。 Visual Studio 2012用にC#でビジュアルコンソールベースのコンソールアプリケーションを作成します。



NuGetパッケージマネージャーコンソールを使用して、AspNetWebApi.Selfhostパッケージをインストールします。 これは、次のコマンドで実行できます。



インストールパッケージAspNetWebApi.Selfhost



このコマンドは、コンソールアプリケーションプロジェクトに必要なすべてのコンポーネントをインストールします。 その後、そのようなリンクがない場合は、プロジェクトのSystem.Webアセンブリへのリンクを追加します。



セルフホスティングサービスを作成する最初のステップは、それを設定することです。 構成は、HttpSelfHostConfigurationクラスの役割です。 以下は、サービスを構成する例です。



var selfHostConfiguraiton = new HttpSelfHostConfiguration("http://localhost:5555"); selfHostConfiguraiton.Routes.MapHttpRoute( name: "DefaultApiRoute", routeTemplate: "api/{controller}", defaults: null );
      
      





最初の行は、アドレスが設定されたサーバークラスのインスタンスを作成します。 2行目は、サーバールーティングメカニズムを構成して、REST APIを実行できるようにします。



次のステップはサーバーを起動することです。これは別のクラスHttpSelfHostServerを使用して実現されます。 以下は、セルフホスティングサービスのためにサーバーを起動するコードです。



 using (var server = new HttpSelfHostServer(selfHostConfiguraiton)) { server.OpenAsync().Wait(); Console.ReadLine(); }
      
      





サーバーでホストするRESTサービスをアプリケーションに追加します。 これを行うには、たとえばProductControllerという名前の新しいWeb API Controllerクラス要素をプロジェクトに追加します。 Productという名前のプロジェクトに新しいクラスを追加します。



 public class Product { public int ID { get; set; } public string Name { get; set; } public string Description { get; set; } }
      
      





新しく作成されたProductControllerで、新しいGetAllProductsメソッドを追加します。



 public IList<Product> GetAllProducts() { return new List<Product>(){ new Product(){ID = 1, Name="Product 1", Description="Desc 1"}, new Product(){ID = 2, Name="Product 2", Description="Desc 2"}, new Product(){ID = 3, Name="Product 3", Description="Desc 3"}, }; }
      
      





競合を避けるために、テンプレートで生成されたGet()メソッドを削除するかコメントアウトする必要があります。



アプリケーションは特定のポートをリッスンするサーバーになるため、アプリケーションは昇格された権限で実行する必要があります。 コンパイルされた実行可能ファイルを自分で管理者として実行するか、管理者として起動されたVS2012で実行するプロジェクトを実行できます。 別の可能性は、Netsh.exeコマンドを使用して、現在のユーザーにURLを予約する権限を付与することです。



実行するアプリケーションを実行します。



これで、アプリケーションの実行中に、IISを使用せずに開始されるセルフホスティングサービスにアクセスできます。 http:// localhost:5555 / api / product /に移動してください 。 テストには、ブラウザーを使用するか、Fiddlerを使用できます(図1)。



clip_image001

図1 セルフホスティングサービスを呼び出した結果



セルフホスティングサービスをWindowsサービスとして実行する



セルフホスティングサービスを開始するには、サーバーアプリケーションをWindowsサービスとして開始することをお勧めします。 これは簡単です。



非常に便利なTopShelfツールを使用して、システムサービスをすばやく作成できます。 NuGetパッケージマネージャーコンソールで、パッケージインストールコマンドを実行します。



インストールパッケージtopshelf



パッケージをインストールすると、APIにアクセスできるようになります。これにより、アプリケーションからWindowsサービスを簡単に作成できます。



プロジェクトのコードを少し変更します。 まず、サーバーの起動を別のProductServiceクラスに入れます。



 class ProductService { private readonly HttpSelfHostServer server; public ProductService() { var selfHostConfiguraiton = new HttpSelfHostConfiguration("http://127.0.0.1:5555"); selfHostConfiguraiton.Routes.MapHttpRoute( name: "DefaultApiRoute", routeTemplate: "api/{controller}", defaults: null ); server = new HttpSelfHostServer(selfHostConfiguraiton); } public void Start() { server.OpenAsync(); } public void Stop() { server.CloseAsync(); server.Dispose(); } }
      
      





次に、Topメソッドを使用してサービスを開始するMainメソッドのコードを変更します。



 static void Main(string[] args) { HostFactory.Run(x => { x.Service<ProductService>(s => { s.SetServiceName("ProductService Example"); s.ConstructUsing(name => new ProductService()); s.WhenStarted(svc => svc.Start()); s.WhenStopped(svc => svc.Stop()); }); x.RunAsLocalSystem(); x.SetDescription("ProductService WebAPI selfhosting Windows Service Example"); x.SetDisplayName("ProductService Example"); x.SetServiceName("ProductService"); }); }
      
      





ここでは、TopShelfが提供する特別なメソッドを使用して、開始に必要なクラス、その開始メソッドと停止メソッド、サービスの説明、および名前を設定することにより、サービスを登録します。



必要な変更の後、プロジェクトをコンパイルします。 これで、アプリケーションをWindowsサービスとして実行できます。これは、次のコマンドを使用して実行されます。



WebApiSelfhostingインストール



サービスがインストールされます(図2)。



clip_image002

図2。 Windowsサービスをインストールする



ここで、Windowsシステムサービスのリストに移動すると、アプリケーションを簡単に見つけることができます(図3)。



clip_image003

図3 システムサービスリストのサービス



サービスが実行されていない場合は、サービスを開始する必要があります(図4)



clip_image004

図4 サービス開始



FiddlerでWindowsサービスとして起動されたセルフホスティングサービスの動作を確認し、すべてが機能することを確認しましょう。



次のコマンドを使用して、システムからサービスを削除できます。



WebApiSelfhostingアンインストール



おわりに



この記事では、ASP.NET WebAPIの機能の1つを調べました。 WebAPIでサポートされているセルフホスティングメカニズムを使用すると、IISサーバーを実行する必要がなく、必要な環境で実行できるRESTサービスを作成できます。



ASP.NET WebAPIは、Visual Studio 2012の開発者が使用できる新しいツールです。VisualStudio 2012 RCの新しいバージョンは、特別な短いアドレスhttp://vs2012.ru/からダウンロードできます。



最終プロジェクトのソースコード(すべてのパッケージとバイナリコンポーネントを含む)は、 sdrv.ms / K9F7Hsで入手できます



All Articles