私は Windows サービスを持っています。このサービスで Web API を公開して、ユーザーが http 経由でサービスと対話できるようにしたいと考えています。
セルフホスト Web API ( http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api )の実行方法を理解しています。これが私の主な問題です。私のApiControllerを実行元のクラスとインターフェースする方法です。これにより、httpリクエストが処理されたときにイベントがトリガーされ、ApiControllerの外部で何かが発生します。
次の例に基づいて、イベント ハンドラー UserRegistered をサービス クラスに登録するにはどうすればよいですか?
Web API コントローラー
public class MyController : ApiController
{
public delegate void OnPostRegister(Profile user);
public event OnPostRegister UserRegistered;
public void PostStream(Profile user)
{
try
{
IProfileBuilder builder = new ProfileBuilder();
builder.RegisterProfile(user);
if (UserRegistered!= null)
{
UserRegistered(user);
}
}
catch (Exception ex)
{
throw new HttpException(500, ex.Message);
}
}
サービス クラス
public partial class Service1 : ServiceBase
{
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
//initialize web api
var config = new HttpSelfHostConfiguration("http://localhost:8080");
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{id}",
new { id = RouteParameter.Optional });
using (var server = new HttpSelfHostServer(config))
{
server.OpenAsync().Wait();
}
//Load registered profiles
}
protected override void OnStop()
{
}
}