2010-02-24 11 views
0

Je souhaite utiliser la classe .net HttpListener pour intercepter les requêtes à mon service de données WCF autogéré (WebServiceHost) afin d'ajouter l'en-tête "WWW-Authenticate" à la réponse (pour l'authentification de l'utilisateur) . Mais il semble que le HttpListener n'intercepte pas les requêtes qui vont à mon service de données. Le HttpListner fonctionne très bien pour différents chemins. Exemple:

HttpListner Prefix: http://localhost/somePath/
Works: http://localhost/somePath/
ne fonctionne pas: http://localhost/somePath/myWCFDataService
HttpListner: intercepter les requêtes vers WCF DataService

Est-il possible d'intercepter également des demandes qui vont à un service de données WCF selfhosted (WebServiceHost) avec le HttpListner?
Voici les extraits de code pertinents ...

Hébergement WCF DataService:

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(); 
    } 
} 

Y at-il une meilleure façon de faire l'authentification HTTP de base dans WCF Services de données? Je ne pouvais pas m'authentifier via la boîte de dialogue de connexion du navigateur Web.

Un grand merci,
Jeho

Répondre

-1

Vous êtes en train d'aboyer le mauvais arbre de jouer avec le mandatement par HttpListener. Jetez un oeil à this.

+0

Ok, cela semble fonctionner. Merci! – Jeldrik

+0

Merci à quiconque pour le downvote au lieu de fixer l'url qui a changé ... – nitzmahone

+0

Désolé, je pensais avoir laissé un commentaire. Merci d'avoir corrigé le lien mais merci de fournir le contexte par [faq] (http://stackoverflow.com/help/how-to-answer) au cas où il se déplacerait à nouveau. – roufamatic