我在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自托管主机。
答案 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的线索)