Pergunta

Quero usar a classe .NET HTTPListener para interceptar solicitações para o meu serviço de dados WCF auto-Hosted (WebServiceHost) para adicionar o cabeçalho "www-autenticate" à resposta (para autenticação do usuário). Mas parece que o httplistener não intercepta nenhuma solicitação que vá para o meu DataService. O httplistner funciona para diferentes caminhos. Exemplo:

Prefixo httplistner: http: // localhost/somepath/
Funciona: http: // localhost/somepath/
Não funciona: http: // localhost/somepath/mywcfdataService

É possível interceptar também solicita que acesse um Serviço de Dados WCF (WebServiceHost) com o HTTPlistner?
Aqui estão os trechos de código relevantes ...

Hospedando o WCF DataService:

WebServiceHost dataServiceHost = new WebServiceHost(typeof(MyWCFDataService));
WebHttpBinding binding = new WebHttpBinding();
dataServiceHost.AddServiceEndpoint(typeof(IRequestHandler), binding, 
    "http://localhost/somePath/myWCFDataService");
dataServiceHost.Open();

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

Existe uma maneira melhor de fazer autenticação básica HTTP nos serviços de dados da WCF? Não consigo autenticar através da caixa de diálogo de login do navegador da web.

Muito Obrigado,
Jeo

Foi útil?

Solução

Você está latindo a árvore errada mexendo com o proxy via httplistener. Dê uma olhada em isto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top