Я хочу использовать класс .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