準備は前記事を参照
今回はWindowsサービスで作るサーバ側プログラムの
ソースのメモをやっていきたいと思います
この人たちです(初期状態から変更なさそうな人はスルーします)
サンプルコード
Service1.cs
using System.Diagnostics;
using System.ServiceProcess;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
private SignalRHost server;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// デバッグ用
Debugger.Launch();
server = SignalRHost.signalRHost;
server.Start();
}
protected override void OnStop()
{
server?.Stop();
}
}
}
using System.ServiceProcess;
namespace WindowsService1
{
public partial class Service1 : ServiceBase
{
private SignalRHost server;
public Service1()
{
InitializeComponent();
}
protected override void OnStart(string[] args)
{
// デバッグ用
Debugger.Launch();
server = SignalRHost.signalRHost;
server.Start();
}
protected override void OnStop()
{
server?.Stop();
}
}
}
OnStartからデバッグでステップ実行とかしたい場合は
黄色マーカーの「Debugger.Launch();」を書きます
サービス起動であるOnStartでSignalRHostのStart()を呼び出し、
サービス停止であるOnStopでStop()を呼び出します
これでこのWindowsサービスが起動したときにサーバ側プログラムが開始されて
停止したときに止まるはず
OnShutdownも入れると本当はいいのかな?
SignalRHost.cs
using Microsoft.Owin.Hosting;
using System;
namespace WindowsService1
{
class SignalRHost
{
public static SignalRHost signalRHost = new SignalRHost();
private IDisposable server;
/// <summary>
/// 開始
/// </summary>
public void Start()
{
server = WebApp.Start<Startup>("http://localhost:8088");
}
/// <summary>
/// 停止
/// </summary>
public void Stop()
{
server?.Dispose();
}
}
}
using System;
namespace WindowsService1
{
class SignalRHost
{
public static SignalRHost signalRHost = new SignalRHost();
private IDisposable server;
/// <summary>
/// 開始
/// </summary>
public void Start()
{
server = WebApp.Start<Startup>("http://localhost:8088");
}
/// <summary>
/// 停止
/// </summary>
public void Stop()
{
server?.Dispose();
}
}
}
このクラスは新規作成しました
使用する環境に合わせて赤字の部分を変更して使います
たぶん環境によって変更が必要なのは8088のポート番号の部分くらいのはず
Startup.cs
using Microsoft.AspNet.SignalR;
using Owin;
namespace WindowsService1
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(new HubConfiguration());
}
}
}
using Owin;
namespace WindowsService1
{
public class Startup
{
public void Configuration(IAppBuilder app)
{
app.MapSignalR(new HubConfiguration());
}
}
}
このクラスも新規作成しました
何しているのかは覚えてませんが
いつかコピペして使うかもしれないので残しておきます
TestHub.cs
using Microsoft.AspNet.SignalR;
using System;
namespace WindowsService1
{
public class TestHub : Hub
{
// TODO ここにクライアントから呼び出すメソッドを書く
}
}
using System;
namespace WindowsService1
{
public class TestHub : Hub
{
// TODO ここにクライアントから呼び出すメソッドを書く
}
}
このクラスも新規作成しました
だいじなHubクラスです
クライアント側プログラムから呼び出したいメソッドとかを
TODOの部分に書いてた気がします
実行結果については、いつかまとめる③で記載します
実行するのに思ったより手間取った…