2013-12-12 9 views
22

現在(IISでホストされている)既存のASP.NET Web APIプロジェクトを、SelfHostフレームワークを使用できるものに変換しようとしています。私は実際の詳細については少しばかげていますが、コンソールウィンドウで自己ホストサーバーを実行し、その上でサービスを実行できることを理解しています。私の問題は、私のプロジェクトはMVCプロジェクトであり、コンソールプロジェクトではないということです。私が一般的にIISでホストされるプロジェクトで作業するので、コンソール/ Windowsアプリケーションに関する私の親しみは、いくらか制限されています。自己ホスティングを使用するようにWeb APIを変換します。

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

この知識のギャップを埋めるのに役立つ多くの情報が得られます。誰かが私を正しい方向に向けることを願っています。高いレベルでさえ。

+0

いくつかの例がありますhttp://stackoverflow.com/questions/12899360/getting-a-post-endpoint-to -work-in-self-hosted-webservicehost-c-sharp-webservi、http://stackoverflow.com/questions/13165533/deserialize私の以前の回答から、-json-object-sent-from-android-app-to-wcf-webservice –

+0

@ L.Bあなたのご意見ありがとうございます。しかし、私が何かを紛失していない限り、私はこれがどのように質問に答えるかはよく分かりません。 – trnelson

+0

trnelson、両方とも回答*自己完結型* RestFulサービスのクライアントコードとサーバーコード。あなたが役に立たないと私のコメントを無視してください。 –

答えて

38

私は最近、Web APIプロジェクトをOWIN(Visual Studio 2013)を使用してセルフホスト型サービスに変換しなければなりませんでした。私は次のようにしました:

(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プロジェクトのプロパティに移動しました。 「アプリケーション」セクションでは、「出力タイプ」を「コンソールアプリケーション」と指定し、「プログラム」クラスを「起動オブジェクト」として設定しました。

// 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(); 
} 

最後に代わりに起動以内config.Routes.MapHttpRoute()を複数回呼び出すのでは、:必須ではありませんが、次のように

は、私は少し見てProgram.Main()内「使用」ブロックを変更しました.Configuration()、あなたはすでにウェブAPIのために書いたルートを参照することができます:ここでは

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

Program.csが「スタートアップオブジェクト」に表示されません。何か案は? – Sinaesthetic

+0

Derp。気にしないで。主な静的を作るのを忘れた:) – Sinaesthetic

+0

これは素晴らしい答えです。私は+10を与えることを望みます。ありがとう! –

関連する問題