Вопрос

Я хочу использовать .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.Взгляните на это.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top