HttpListner:перехватывать запросы к WCF DataService
-
22-09-2019 - |
Вопрос
Я хочу использовать .net-класс HttpListener для перехвата запросов к моей службе данных WCF, размещенной на собственном хостинге (WebServiceHost), чтобы добавить заголовок "WWW-Authenticate" к ответу (для аутентификации пользователя).Но похоже, что HttpListener не перехватывает никаких запросов, которые поступают в мой dataservice.HttpListner отлично работает для разных путей.Пример:
Префикс HttpListner: http://localhost/somePath/
Работает: http://localhost/somePath/
Не работает: http://localhost/somePath/myWCFDataService
Возможно ли также перехватывать запросы, которые отправляются в автономную службу передачи данных WCF (WebServiceHost) с помощью HttpListner?
Вот соответствующие фрагменты кода...
Хостинг сервиса данных WCF:
WebServiceHost dataServiceHost = new WebServiceHost(typeof(MyWCFDataService));
WebHttpBinding binding = new WebHttpBinding();
dataServiceHost.AddServiceEndpoint(typeof(IRequestHandler), binding,
"http://localhost/somePath/myWCFDataService");
dataServiceHost.Open();
HTTP-Листнер:
HttpListener httpListener = new HttpListener();
httpListener.Prefixes.Add("http://localhost/somePath/");
httpListener.AuthenticationSchemes = AuthenticationSchemes.Anonymous;
httpListener.Start();
while (true)
{
HttpListenerContext context = httpListener.GetContext();
string authorization = context.Request.Headers["Authorization"];
if (string.IsNullOrEmpty(authorization))
{
context.Response.StatusCode = 401;
context.Response.AddHeader("WWW-Authenticate", "Basic realm=\"myDataService\"");
context.Response.OutputStream.Close();
context.Response.Close();
}
}
Есть ли лучший способ выполнить базовую аутентификацию HTTP в службах передачи данных WCF?Я не хочу иметь возможность пройти аутентификацию через диалоговое окно входа в веб-браузер.
Большое спасибо,
JeHo
Решение
Вы поднимаете не то дерево, путаясь с проксированием через HttpListener.Взгляните на это.