HttpListner: перехватывать запросы к WCF DataService - PullRequest
0 голосов
/ 24 февраля 2010

Я хочу использовать класс .net HttpListener для перехвата запросов к моей собственной службе данных WCF (WebServiceHost), чтобы добавить к ответу заголовок "WWW-Authenticate" (для аутентификации пользователя). Но похоже, что HttpListener не перехватывает запросы, отправляемые на мой сервис данных. HttpListner отлично работает для разных путей. Пример:

Префикс HttpListner: http://localhost/somePath/
Works: http://localhost/somePath/
Doesn't Работа: 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 Listner:

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

1 Ответ

0 голосов
/ 26 февраля 2010

Вы лаете из неверного дерева, связываясь с прокси через HttpListener. Посмотрите на это .

...