WebApp.Start()两次调用“启动配置”

时间:2018-10-10 06:55:11

标签: c# owin

我在Windows服务中托管Web API和SignalR客户端。 WebApp.Start之后的任何代码都将执行两次。此外,还会两次收到对Web API的请求。 下面是我的示例代码,在此TestSignalRService:3中,配置中的痕迹被打印两次。 我的App.config也很基础,没有任何设置。

public partial class Service1 : ServiceBase
{
    public Service1()
    {
        InitializeComponent();
    }

    IDisposable SignalR;
    HttpSelfHostServer server;
    protected override void OnStart(string[] args)
    {
        Start();
    }

    protected override void OnStop()
    {
        server.CloseAsync();
        SignalR.Dispose();
    }

    public void Start()
    {
        Trace.WriteLine("TestSignalRService:1");

        var config = new HttpSelfHostConfiguration("http://localhost:9090");
        config.Routes.MapHttpRoute(
                          name: "DefaultApi",
                          routeTemplate: "api/{controller}/{id}",
                          defaults: new { id = RouteParameter.Optional }
                          );

        server = new HttpSelfHostServer(config);


        server.OpenAsync().Wait();
        Trace.WriteLine("TestSignalRService:2");

        string url = "http://*:9191/";
        try
        {
            SignalR = WebApp.Start<TestStart>("http://*:9191/");
            Trace.WriteLine("TestSignalRService:3");
        }
        catch (Exception e)
        {
            Trace.WriteLine("TestSignalRService::Exception in starting Signal R " + e.Message);
        }

    }
}

class TestStart
{
    public void Configuration(IAppBuilder app)
    {
        Trace.WriteLine("TestSignalRService::Startup configuration");

        Trace.WriteLine("TestSignalRService::Startup configuration 1");
        app.Map("/signalr", map =>
        {
            //map.UseCors(CorsOptions.AllowAll);
            var hubConfiguration = new HubConfiguration
            {  EnableDetailedErrors = true
            };               
            map.RunSignalR(hubConfiguration);
        });            
        Trace.WriteLine("TestSignalRService::Startup configuration 3");
    }
}

我的服务没有重新启动,因为WebApp上方的跟踪没有打印两次。 WebApp.Start调用之后的所有内容都会执行两次。 这可能是什么原因以及如何解决?请帮忙,我是第一次使用OWIN自托管主机。

1 个答案:

答案 0 :(得分:0)

“向陌生人抱怨-立即找到答案”的法律对我有效:3

public void Configure()
{
    // code here executes once per application starts

    app.Run(async context => 
    {
        // code here executes once per http request
    });
}

由于来自浏览器的默认请求为“ /”和“ /favicon.png”,因此我的网络应用启动了两次。

感谢juunas answer的线索)