我只能使用OWIN UseStaticFiles提供一个文件

时间:2013-08-13 22:25:46

标签: .net owin

我正在使用OWIN来通过http服务从Windows服务中提供静态内容。 (为Windows服务嵌入Web管理工具)。

我遇到了一些奇怪的行为:

  • 当我运行该服务时,我只能访问“web”文件夹中的一个文件,每次连续调用会导致浏览器显示该页面是不可用(ERR_CONNECTION_RESET)。
  • 嵌入式WebApi 可以访问
  • 当我使用相同的地址和端口重新启动服务时,文件将保持不可见。
  • 当我在另一个端口上重启服务时,我可以访问一次文件...

顺便说一下,此“web”文件夹中的这些文件被设置为“复制到输出目录”属性的“始终复制”。

任何人都知道出了什么问题?

请参阅此处的StartUp配置类

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

        }
    }

2 个答案:

答案 0 :(得分:2)

我想我知道出了什么问题:您使用的第三方框架是alpha或beta。你不应该根据你对他们的经验和他们的一般状态来依赖他们。

我创建了一个几乎相同的设置(link to project files)并看到了完全相同的结果。使用过的库还没有完成任务。

编辑:

我可以使用Microsoft.Owin.StaticFiles库的0.23.20815.0版本更加明确地运行它。我是从最新的Katana来源自己建造的。您可以在my GitHub page找到我的最新代码。

答案 1 :(得分:1)

我使用类似的配置:Windows服务作为带有WebApi和StaticFiles的OWIN主机。有了这个,我从来没有看到你的问题。它工作正常。

我使用的是Katana Nightly Builds的StaticFiles版本0.24.0-pre-20624-416。也许这也将解决你的问题。 另一个区别是,我只使用相对路径配置StaticFiles,而不是像你那样配置绝对路径。它应该没有任何区别,但是谁知道呢?

BTW:我在2个月前写过关于StaticFiles的博客:http://ritzlgrmft.blogspot.de/2013/06/owin-with-static-files-exception.html