OWIN を使用して、Windows サービス内から http 経由で静的コンテンツを提供できるようにしています。(Windows サービス用の Web 管理ツールを組み込むため)。
私はいくつかの奇妙な動作を経験します:
- サービスを実行すると、「web」フォルダーにある1 つのファイルにしかアクセスできず、連続して呼び出すたびに、ページが利用できない(ERR_CONNECTION_RESET) というブラウザーが表示されます。
- 埋め込まれた WebApiは引き続きアクセス可能です。
- 同じアドレスとポートでサービスを再起動すると、ファイルは表示されません。
- 別のポートでサービスを再起動すると、一度ファイルにアクセスできます...
ちなみに、この「web」フォルダ内のこのファイルは、「出力ディレクトリにコピー」プロパティが「常にコピー」に設定されています。
誰が何がうまくいかないのか知っていますか?
ここで私のスタートアップ構成クラスを参照してください
public class WebStartUp
{
public void Configuration(IAppBuilder app)
{
string staticFilesDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "web");
app.UseStaticFiles(staticFilesDir);
HttpConfiguration config = new HttpConfiguration();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
app.UseWebApi(config);
}
}
ここでそれをホストする私のWindowsサービスを参照してください...
public partial class MyService : ServiceBase
{
private IDisposable webApp;
private const string ServiceAddress = "http://localhost:2345";
public MyService()
{
}
protected override void OnStart(string[] args)
{
InternalStart();
}
internal void InternalStart()
{
webApp = WebApp.Start<WebStartUp>(url: ServiceAddress);
}
protected override void OnStop()
{
}
public static void Main()
{
#if DEBUG
var service = new MyService();
Console.WriteLine("starting");
service.InternalStart();
Console.ReadLine();
#else
ServiceBase[] ServicesToRun;
ServicesToRun = new ServiceBase[] {
new RaceManagerService();
}
ServiceBase.Run(ServicesToRun);
#endif
}
}