Я пытаюсь запустить собственный исполняемый файл в качестве службы Windows. Я использую бета-версию MVC 4 Web API. Сначала я использовал блог Дерика Уиттакера для настройки основного консольного приложения и протестировал его с положительными результатами.
Затем я использовал блог Эйнара Эгильссона , чтобы он работал как консольное приложение и служба Windows. Приложение установлено как сервис просто отлично. Я настроил вход в службу, чтобы использовать свой собственный для этого базового тестирования; без этого он не смог привязаться к сокету. Когда служба запускается, я вижу все свои журналы трассировки, как и ожидалось, нет фатальных ошибок. Приложение работает нормально. Когда я тестирую с использованием fiddler, используя тот же запрос для консольного приложения, я получаю «HTTP / 1.1 500 Internal Server Error».
Используя этот же код, когда я отключаю службу, а затем запускаю с помощью F5 в VS, приложение запускается нормально и выполняет тот же запрос !? Записи журнала идентичны в одних и тех же путях выполнения.
public partial class TestService : ServiceBase {
private static readonly Logger Logger = LogManager.GetCurrentClassLogger();
private HttpSelfHostServer _server;
static void Main(string[] args) {
Logger.Debug("Main Called");
var service = new TestService();
if (Environment.UserInteractive) {
Logger.Debug("Environment.UserInteractive == true");
Console.WriteLine("Press any key to stop program");
service.OnStart(args);
service.OnStop();
} else {
Logger.Debug("Environment.UserInteractive == false");
try {
Run(service);
} catch(Exception exception) {
Logger.Fatal(exception.Message, exception);
}
}
}
protected override void OnStart(string[] args) {
Logger.Debug("OnStart called");
var hostUri = string.Format("http://{0}:{1}", Environment.MachineName, ConfigurationManager.AppSettings["Service.Port"]);
Logger.Debug("URL:" + hostUri);
var selfHostConfiguration = new HttpSelfHostConfiguration(hostUri);
selfHostConfiguration.Routes.MapHttpRoute(
name: "DefaultApiRoute",
routeTemplate: "endpoints/{controller}",
defaults: null
);
Logger.Debug("Routes registered");
try {
using (_server = new HttpSelfHostServer(selfHostConfiguration)) {
Logger.Debug("Hosting at " + hostUri + "/endpoints/{controller}");
_server.OpenAsync().Wait();
if (Environment.UserInteractive) { // *** I've tried this commented out as well
Console.ReadLine();
}
Logger.Debug("End of using");
}
} catch(Exception exception) {
Logger.Fatal(exception.Message, exception);
if(exception.InnerException != null) {
Logger.Fatal(exception.InnerException.Message, exception.InnerException);
}
}
}
protected override void OnStop() {
_server.Dispose();
}
}