web-dev-qa-db-ja.com

セルフホスティングを使用するようにWeb APIを変換する

(現在IISでホストされている)既存のASP.NET Web APIプロジェクトをSelfHostフレームワークを使用できるプロジェクトに変換しようとしています。実際の詳細については少しあいまいですが、コンソールウィンドウでセルフホストサーバーを実行し、その上でサービスを実行できることを理解しています。私が抱えている問題は、私のプロジェクトがMVCプロジェクトであり、コンソールプロジェクトではないことです。 IISでホストされるプロジェクトを一般的に扱っているため、コンソール/ Windowsアプリの知識は多少限られています。

私が少し混乱しているのは、Visual Studioの既存のWeb APIプロジェクトを新しいコンソールアプリケーションに変換する必要があるかどうか、またはソリューションでWebサーバーとして機能できる別のコンソールアプリケーションプロジェクトを作成する方法があるかどうかです。 Web APIサービス、またはMain()エントリポイントを持つコンソール要素を既存のMVCプロジェクトに追加する方法がある場合(Global.asaxエントリポイントをオーバーライドします)。

検索では、この知識のギャップを埋めるのに役立つ情報はあまり得られませんでした。誰かが私を正しい方向に向けられることを願っています。高レベルでも。

24
trnelson

最近、OWINを使用して(Visual Studio 2013で)Web APIプロジェクトをセルフホストサービスに変換する必要がありました。私はそれを次のように行いました:

(1)プロジェクトのルートに手動で追加されたProgram.csおよびStartup.csファイル。ここで説明するコードを含む両方のファイル: http://www.asp.net/web-api/overview/hosting-aspnet-web-api/use-owin-to-self-Host-web-api

(2)Web APIプロジェクトのプロパティに移動しました。 「アプリケーション」セクションで、「出力タイプ」を「コンソールアプリケーション」と指定し、「プログラム」クラスを「スタートアップオブジェクト」として設定しました。

必須ではありませんが、Program.Main()内の「using」ブロックを次のように少し変更しました。

// Start OWIN Host 
using (WebApp.Start<Startup>(url: baseAddress)) 
{ 
  // Create HttpCient and make a request to api/values 
  HttpClient client = new HttpClient(); 
  var response = client.GetAsync(baseAddress + "api/values").Result; 

  if (response != null)
  {
    Console.WriteLine("Information from service: {0}", response.Content.ReadAsStringAsync().Result);
  }
  else
  {
    Console.WriteLine("ERROR: Impossible to connect to service");
  }

  Console.WriteLine();
  Console.WriteLine("Press ENTER to stop the server and close app...");
  Console.ReadLine();
} 

最後に、Startup.Configuration()内でconfig.Routes.MapHttpRoute()を複数回呼び出す代わりに、Web API用にすでに記述したルートを参照できます。

// Configure Web API for self-Host. 
var config = new HttpConfiguration();
WebApiConfig.Register(config);        
app.UseWebApi(config); 
44