2011-10-20 7 views
3

WCF Web APIを使用して公開したいリソースがいくつかあります。私はWebホストを使ってWeb APIを調査しましたが、私たちのサービスはすべて本番でWindowsサービスとして実行されていますので、テストを脇に置き、必要に応じてすべてが機能することを確認してください。私はここでサンプルアプリケーションとして見た:http://webapicontrib.codeplex.com/SourceControl/changeset/view/2d771a4d6f6f#Samples%2fSelfHosted%2fserver%2fProgram.csしかし、HttpConfigurableServiceHostクラスは私たちのコードからアクセスできないので、これは現在のバージョン(プレビュー5)では動作しません。WindowsサービスでWeb APIをホストする方法

Web APIの最も魅力的な側面の1つは、MapServiceRouteと新しいWebApiConfigurationを使用した簡単な起動です。しかし、サービスのベースURLとポートを定義する方法はありません。 IISでこの情報を構成するため、IISでサービスをホストすることは明らかにこれを排除します。 Windowsサービスでホスティングするときにこれをどのように達成できますか?

答えて

2

最新バージョンはHttpServiceHostを使用しています。 http://webapicontrib.codeplex.com/SourceControl/changeset/view/ddc499585751#Samples%2fSelfHosted%2fserver%2fProgram.cs

問題が引き続きある場合は、私にpingしてください。

+0

は申し訳ありませんが、オフィスからツイッターへはアクセスできません。より多くのサービスを追加するには?それぞれに新しいホストを作成する必要がありますか、既存のホストに追加する方法はありますか? – SonOfPirate

+0

@SonOfPirateはい、ServiceContractごとに新しいHttpServiceHostを作成する必要があります。実際、これはまさにMapServiceRouteがカバーしていることです。個人的に、私はあなたがこれをしなくてはいけないとは思っていませんが、HttpServiceHostは比較的軽量であるように見えます。 –

1

これはコンソールアプリケーションを使用した基本コードです。 Windowsサービスは、startメソッドとstopメソッドを使用してサービスを開始および停止し、ブロックする必要がない点を除いて、同じ基本的な方法を使用します。

static void Main(string[] args) 
{ 
    var host = new HttpServiceHost(typeof(PeopleService), "http://localhost:8080/people"); 

    host.Open(); 

    foreach (var ep in host.Description.Endpoints) 
    { 
     Console.WriteLine("Using {0} at {1}", ep.Binding.Name, ep.Address); 
    } 

    Console.ReadLine(); 

    host.Close(); 
} 

thisブログ記事を参照してください。

+0

上記と同じ質問ですが、もっと多くのサービスをサポートするにはどうすればいいですか? – SonOfPirate

+0

サービスタイプごとに新しいHttpServiceHostを作成する必要があります。 – Maurice

+0

私は両方の答えを正確にマークすることができればうれしいですが、サイトはそれを許可しません。私はあなたの助けに感謝し、あなたの応答は同じように貴重でしたが、Darrelが最初に反応し、リンクのコードがもう少し完成したので、私は彼に印を付けました。 – SonOfPirate

3

実際はかなりシンプルです。一言で言えば、HttpSelfHostServerとHttpSelfHostConfigurationをインスタンス化し、次にserver.OpenAsync()を呼び出す必要があります。この使用したWindowsサービスのプロジェクトテンプレートおよび/またはTopshelfライブラリーを行う方法の例について

public void Start() 
{ 
    _server.OpenAsync(); 
} 

public void Stop() 
{ 
    _server.CloseAsync().Wait(); 
    _server.Dispose(); 
} 

は、私のブログの記事を参照してください。 http://www.piotrwalat.net/hosting-web-api-in-windows-service/

+1

これは明らかに、これはASP.NET MVC 4の機能であり、したがって、最新のASP.NET Web APIと名前を変更したASP.NET Web APIで利用できます。元の投稿は、WCF Web API(ASP.NETバージョンの前身)を参照していました。そのバージョンでは、SelfHost名前空間は存在しませんでした。 – SonOfPirate

関連する問題