У меня есть собственный проект OWIN, который я пытаюсь запустить.Он настроен на прослушивание:
http://localhost:8080
Каждый раз, когда я пытаюсь получить доступ к этому URL, я получаю HTTP-ошибку 503. Служба недоступна ошибка.
Я запустил netstat -a -b
и абсолютно уверен, что на порте 8080 не работает другое приложение.
Когда я изменяю конфигурацию на http://+:8080
, проект работает нормально.Таким образом, единственное изменение - localhost
к +
.
Теперь вот странные вещи:
Я убедился, что все записи (localhost:8080
или +:8080
) в пространстве имен HTTP идентичны (см. , и , , где «iedereen» является голландским для «всех» (и, да, это только на моей тестовой станции)),Соответствующий вывод netsh http show urlacl
:
URL Reservations:
Reserved URL : http://+:8080/
User: \Everyone
Listen: Yes
Delegate: Yes
SDDL: D:(A;;GAGXGWGR;;;WD)
Reserved URL : http://localhost:8080/
User: \Everyone
Listen: Yes
Delegate: Yes
SDDL: D:(A;;GAGXGWGR;;;WD)
У меня такая же проблема на порте 8081 или других портах;«+
» работает, «localhost
» - нет.Поэтому, чтобы убедиться, что с 8080 не было ничего конфликтующего, я попробовал 8081 (и другие порты, и, конечно же, с правильными urlacl)
- Когда я использую
+:8080
, приложение может бытьдостиг хорошо;Я получаю желаемый ответ.Так что это не проблема брандмауэра.И не для порта 8081 или других портов, которые я пробовал.Кроме того, 503
исходит из приложения (в конце концов, это ошибка приложения, но также: когда я останавливаю приложение, я просто не получаю ответа вместо 503), поэтому, опять же, проблема с брандмауэром. - Я попытался запустить от имени администратора безрезультатно, то же самое для запуска VS от имени администратора.
localhost:8080
работает на компьютере коллеги (именно так все и было) localhost
разрешает в порядке 127.0.0.1
и ::1
.Файл измененных хостов отсутствует.
Кажется, я не могу отладить эту проблему, я могу установить точку останова в моем методе контроллера, но она никогда не достигается.Приложение запускается нормально.
Хорошо, к тестовому коду для воспроизведения:
using Microsoft.Owin.Hosting;
using Owin;
using System;
namespace TestApp
{
internal class Program
{
private static void Main(string[] args)
{
using (WebApp.Start<WebAppStartup>("http://localhost:8080"))
{
Console.WriteLine("Press [enter] to quit...");
Console.ReadLine();
}
}
}
internal class WebAppStartup
{
public void Configuration(IAppBuilder app)
{
app.Run(context =>
{
context.Response.ContentType = "text/plain";
return context.Response.WriteAsync("Hello, world.");
});
}
}
}
Опять же, вышеописанное не работает , если я не изменю localhost
на +
.
Мой главный вопрос : есть ли способ отладить это?Я не получаю никаких исключений при запуске приложения, но метод контроллера никогда не достигается (или: в приведенном выше коде «Hello, world» никогда не возвращается).Я проверил журнал событий Windows, но там ничего нет.
Примечание. Моя проблема на самом деле не является проблемой (поскольку у меня есть «обходной путь»);когда я просто изменяю конфигурацию для использования http://+:8080
, но на данный момент это принципиальный вопрос, и я хотел бы знать , почему +
работает, а localhost
не работаетt.
Меня больше всего интересует, как это отладить и в чем разница между localhost
и +
;как настроить OWIN или где установить точку останова, чтобы увидеть, как поступает запрос, или как отправляется ответ 503, или как записать это в журнал или ...
Редактировать: я изменил код напрочитайте:
using Microsoft.Owin;
using Microsoft.Owin.Hosting;
using Owin;
using System;
using System.Threading.Tasks;
namespace TestApp
{
internal class Program
{
private static void Main(string[] args)
{
using (WebApp.Start<WebAppStartup>("http://localhost:8080/")) // or: http://+:8080/
{
Console.WriteLine("Press [enter] to quit...");
Console.ReadLine();
}
}
}
internal class WebAppStartup
{
public void Configuration(IAppBuilder app)
{
app.Use<TestMiddleware>();
app.Run(context =>
{
context.Response.ContentType = "text/plain";
Console.WriteLine("Sending response");
return context.Response.WriteAsync("Hello, world.");
});
}
}
public class TestMiddleware : OwinMiddleware
{
public TestMiddleware(OwinMiddleware next) : base(next) { }
public override async Task Invoke(IOwinContext context)
{
Console.WriteLine("Begin Request");
await Next.Invoke(context);
Console.WriteLine("End Request");
}
}
}
Когда я запускаю приложение с http://+:8080
, я вижу, что в моей консоли появляется следующее:
Begin Request
Sending response
End Request
А также в моем браузере появляется «Hello, world».Я могу установить точку останова в строке «начать запрос», и она попадет.Затем я снова изменяю на http://localhost:8080
и ... HTTP Error 503. The service is unavailable.
.Снова.Консоль ничего не показывает (кроме очевидного «Нажмите [enter], чтобы выйти ...»), точка останова не достигнута.