PROBLEMA: Mensagem de erro "Acesso negado" quando você chamar um serviço Web durante a autenticação anônima está desativada

IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 811318
Sintomas
Quando você tenta chamar um aplicativo de serviço da Web e autenticação de acesso anônimo está desativada, você receberá a seguinte mensagem de erro.
Falha na solicitação com status HTTP 401: acesso negado.

Descrição: Ocorreu uma exceção não tratada durante a execução de solicitação da Web atual. Examine o rastreamento da pilha para obter mais informações sobre o erro e onde foi originado no código.

Detalhes da exceção: System.Net.WebException: A solicitação falhou com status HTTP 401: acesso negado.
Causa
Quando a autenticação de acesso anônimo está desativada para o aplicativo de serviço da Web, todos os aplicativos de chamador devem fornecer as credenciais antes de fazer qualquer solicitação. Por padrão, o proxy de cliente do serviço da Web não herda as credenciais do contexto de segurança onde o aplicativo de cliente de serviço da Web está sendo executado.
Resolução
Para resolver esse problema, você deve utilizar a propriedade credenciais do proxy de cliente do Web service para definir as credenciais de segurança para autenticação de cliente do serviço da Web.

Para definir a propriedade credenciais , siga um destes procedimentos:
  • método primeiro
    Atribua DefaultCredentials para a propriedade credenciais da classe Proxy Web Service para chamar o serviço da Web enquanto a autenticação de acesso anônimo está desativada. A propriedade DefaultCredentials da classe CredentialCache fornece credenciais do sistema do contexto de segurança onde o aplicativo está sendo executado. Para fazer isso, use o código a seguir:

    exemplo de .NET translation from VPE for Csharp Visual
    //Assigning DefaultCredentials to the Credentials property//of the Web service client proxy (myProxy).myProxy.Credentials= System.Net.CredentialCache.DefaultCredentials;
    Exemplo do Visual Basic .NET
    'Assigning DefaultCredentials to the Credentials property'of the Web service client proxy (myProxy).myProxy.Credentials= System.Net.CredentialCache.DefaultCredentials
  • método segundo
    Você também pode usar a classe CredentialCache para fornecer credenciais para autenticação de cliente do serviço da Web. Crie uma instância da classe CredentialCache . Crie uma instância de NetworkCredential que usa o nome de usuário especificado, senha e domínio. Adicione NetworkCredential à classe CredentialCache com o tipo de autenticação. Para fazer isso, use o código a seguir:

    exemplo de .NET translation from VPE for Csharp Visual
    //Create an instance of the CredentialCache class.CredentialCache cache = new CredentialCache();// Add a NetworkCredential instance to CredentialCache.// Negotiate for NTLM or Kerberos authentication.cache.Add( new Uri(myProxy.Url), "Negotiate", new NetworkCredential("UserName", "Password", "Domain")); //Assign CredentialCache to the Web service Client Proxy(myProxy) Credetials property.myProxy.Credentials = cache;

    exemplo do Visual Basic .NET
    'Create an instance of the CredentialCache class.Dim cache As CredentialCache = New CredentialCache()'Add a NetworkCredential instance to CredentialCache.'Negotiate for NTLM or Kerberos authentication.cache.Add(New Uri(myProxy.Url), "Negotiate", New NetworkCredential("UserName", "Password", "Domain"))'Assign CredentialCache to the Web service Client Proxy(myProxy) Credetials property.myProxy.Credentials = cache
Observação A classe CredentialCache e a classe NetworkCredential pertencem ao namespace System.NET .

Para obter mais informações sobre como definir a propriedade credenciais , consulte a seção "Informações adicionais" neste artigo.
Situação
Esse comportamento é por design.
Mais Informações
DefaultCredentials representa as credenciais do sistema para o contexto de segurança atual no qual o aplicativo está sendo executado. Para um aplicativo do lado do cliente, as credenciais padrão são normalmente as credenciais do Windows, como nome de usuário, senha e domínio do usuário que está executando o programa. Para o ASP.NET programas, as credenciais padrão são as credenciais do usuário da identidade para o processo do operador do ASP.NET ou o usuário que está sendo representado. No seguinte exemplo ASP.NET programa, DefaultCredentials representa a conta de usuário do ASPNET (ou conta de usuário NetworkService para aplicativos executados no Microsoft IIS [] 6.0) porque não há representação está definida como o chamador.

Passos para reproduzir o problema

  1. Crie um novo Serviço da Web ASP.NET usando Visual translation from VPE for Csharp .NET ou Visual Basic. NET.
  2. Nomeie o projeto WebServiceTest .
  3. Por padrão, Service1.asmx é criado.
  4. Descomente padrão WebMethod "HelloWorld()".
  5. No menu Build , clique em Build Solution .
  6. Desativar anônimos acesso a WebServiceTest. Para fazer isso, execute as seguintes etapas:
    1. No painel de controle, clique duas vezes em Ferramentas administrativas .
    2. Clique duas vezes em Internet Information Services .
    3. Expanda Internet Information Services e, em seguida, localize o diretório virtual WebServiceTest .
    4. Clique com o botão direito do mouse WebServiceTest e, em seguida, clique em Propriedades .
    5. Clique na guia Segurança de diretório .
    6. Em Anonymous access and authentication control , clique em Editar .
    7. Na caixa de diálogo Métodos de autenticação , clique para desmarcar a caixa de seleção acesso anônimo .
    8. Clique para selecionar o integrada do Windows autenticação caixa de seleção.

      Observação Verifique se que somente integrada do Windows autenticação está selecionada.
    9. Clique em OK para fechar a caixa de diálogo Métodos de autenticação .
    10. Clique em OK para fechar as Propriedades .
  7. No menu Build , clique em Build Solution .
  8. Digite o seguinte endereço no navegador para exibir a descrição do serviço Service1 da Web:
    http://localhost/WebServiceTest/Service1.asmx
  9. Teste o HelloWorld WebMethod. O WebMethod funciona conforme o esperado.
  10. Adicionar uma referência da Web a um teste ASP.NET Application . Para fazer isso, execute as seguintes etapas:
    1. Crie um novo Aplicativo Web ASP.NET usando Visual translation from VPE for Csharp .NET ou Visual Basic. NET. Nomeie o projeto WebServiceCaller .
    2. Por padrão, WebForm1.aspx é criado.
    3. No Solution Explorer, clique com o botão direito do mouse em References e, em seguida, clique em Add Web Reference .
    4. Na caixa de texto endereço , digite a URL para WebServiceTest da seguinte maneira:
      http://localhost/WebServiceTest/Service1.asmx
    5. Clique em Ir ou pressione ENTER e, em seguida, clique em Add Reference .
  11. No Solution Explorer, clique com o botão direito do mouse em WebForm1.aspx e, em seguida, clique em View Code .
  12. Acrescentar o seguinte código ao evento Page_Load :

    visual translation from VPE for Csharp .NET exemplo:
    // Start an instance of the Web service client-side proxy.localhost.Service1 myProxy = new localhost.Service1();Response.Write( myProxy.HelloWorld());
    Visual Basic .NET exemplo:
    'Start an instance of the Web service client-side proxy.Dim myProxy As localhost.Service1 = New localhost.Service1()Response.Write(myProxy.HelloWorld())
  13. No menu Debug , clique em Iniciar e exibir o aplicativo no navegador.
  14. A mensagem de erro que é discutida em "Sintomas" seção aparece no navegador.
  15. Para resolver esse problema, atribua DefaultCredentials para a propriedade credenciais do proxy do lado do cliente serviço da Web. Para fazer isso, insira o código a seguir antes da linha "Response.write (myProxy.HelloWorld())":

    visual translation from VPE for Csharp .NET exemplo:
    myProxy.Credentials= System.Net.CredentialCache.DefaultCredentials;
    Visual Basic .NET exemplo:
    myProxy.Credentials = System.Net.CredentialCache.DefaultCredentials
  16. Repita a etapa 13.
Referências
Para obter informações adicionais, clique no número abaixo para ler o artigo na Base de dados de Conhecimento da Microsoft:
301273COMO: Gravar um serviço da Web simples usando o Visual Basic .NET
308359COMO: Gravar um serviço da Web simples usando o Visual translation from VPE for Csharp .NET


Para obter mais informações, visite os seguintes sites:

Aviso: este artigo foi traduzido automaticamente

Propriedades

ID do Artigo: 811318 - Última Revisão: 04/19/2007 07:58:30 - Revisão: 2.10

Microsoft Web Services Enhancements para Microsoft .NET 1.1, Microsoft ASP.NET 1.1, Microsoft ASP.NET 1.0, Microsoft Web Services (included with the .NET Framework) 1.0

  • kbmt kbauthentication kbsecurity kberrmsg kbwebforms kbprb KB811318 KbMtpt
Comentários