Mostrar mensagens com a etiqueta ASP. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta ASP. Mostrar todas as mensagens

quarta-feira, 18 de janeiro de 2017

Não foi possível carregar o ficheiro ou assemblagem 'System.Web.Extensions

Dica rápida para quem tiver esse erro...
Acontece quando está utilizando uma versão do ASP.NET Ajax diferente do Framework da aplicação

Mensagem de erro do analisador: Não foi possível carregar o ficheiro ou assemblagem 'System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' ou uma das respectivas dependências. O sistema não conseguiu localizar o ficheiro especificado. (G:\DADOS\Sites e Projectos\SPA\web.config line 149)

Informações da versão: Versão do Microsoft .NET Framework:2.0.50727.8745; Versão do ASP.NET:2.0.50727.8745

image

Necessário Instalar o ajax para .net 2 ASPAJAXExtSetup.msi

image

Problema resolvido

terça-feira, 10 de janeiro de 2017

HTTP Error 500.22 - Internal Server Error

HTTP Error 500.22 - Internal Server Error
An ASP.NET setting has been detected that does not apply in Integrated managed pipeline mode.

 

image

Solução

No seu web.config, verificar que seguinte chave existe
<configuration>
    <system.webServer>
        <validation validateIntegratedModeConfiguration="false"/>
    </system.webServer>
</configuration>

 

A adição de endereços tipo:

<validation validateIntegratedModeConfiguration="false"/>

que evitam o erro, não é apropriado para todas as circunstâncias. Tendo corrido em torno desta questão algumas vezes, espero ajudar os outros não só superar o problema, mas compreendê-lo. (Que se torna cada vez mais importante quando o IIS 6 se desvanece em mito e rumor.)

No VS 2015

Escolher Classic image nas propriedades do projeto

image

 

 

 

 

Problema:

Esse problema e a confusão em torno deste problema começaram com a introdução do ASP.NET 2.0 e do IIS 7. O IIS 6 tinha e continua a ter apenas um modo de pipeline, e é equivalente ao que o IIS 7+ chama de modo "clássico". O segundo modo de pipeline mais recente e recomendado para todos os aplicativos em execução no IIS 7+ é chamado de modo "Integrado".

Então, qual é a diferença? A principal diferença é como o ASP.NET interage com o IIS.

· O modo clássico é limitado a um pipeline do ASP.NET que não pode interagir com o pipeline IIS. Essencialmente, um pedido vem e se através da configuração do servidor foi escolhido o “IIS 6/Classic” foi escolhido e que o ASP.NET pode lidar com ele, então, em seguida o IIS liberto o pedido para ASP.NET. O significado disso pode ser obtido a partir de um exemplo. Se eu fosse autorizar o acesso a arquivos de imagem estática, eu não seria capaz de fazê-lo com um módulo ASP.NET porque o pipeline do IIS 6 irá lidar com essas solicitações e o ASP.NET nunca verá essas solicitações porque eles nunca serão entregues (claro que existem maneiras de obter todo o tipo de coisas estranhas no pipeline ASP.NET do IIS6/Classic através de coisas como wildcard mappings , caso goste desse tipo de coisa). Por outro lado, autorizar que os usuários possam aceder uma página .ASPX como por exemplo uma solicitação para Foo.aspx é trivial, mesmo no IIS6/Classic porque o IIS sempre entrega essas solicitações ao pipeline ASP.NET. No modo clássico, o ASP.NET não sabe o que não foi dito e há muito que o IIS6/Classic pode não estar dizendo.

· Modo integrado é recomendado porque manipuladores ASP.NET e módulos podem interagir diretamente com o pipeline IIS. Já não é limitado ao facto do pipeline IIS simplesmente entregar o pedido para o pipeline ASP.NET, agora ele permite que o código ASP.NET ligue diretamente para o pipeline do IIS e obtenha todas as solicitações que solicitar. Isso significa que um módulo ASP.NET não pode apenas observar solicitações para arquivos de imagem estáticos, mas pode interceptar essas solicitações e agir, negando acesso, registrando o pedido, etc.

Superando o erro:

1. Se você estiver executando um aplicativo mais antigo que foi originalmente criado para o IIS 6, talvez você mudou para um novo servidor, pode não haver absolutamente nada de errado com a execução do pool de aplicativos desse aplicativo no modo clássico. Vá em frente, você não precisa se sentir mal.

2. Caso esteja dando uma limpeza no seu site ou dando uma “cara nova” ou caso tenha instalado uma biblioteca de terceiros através. Nesse caso, é inteiramente possível que tenham sido adicionados os elementos httpHandlers ou httpModules a system.web. O resultado é o erro que você está vendo, porque validateIntegratedModeConfiguration padrões true. Agora você tem duas opções:

1. Remova os elementos httpHandlers e httpModules de system.web. Há alguns resultados possíveis a partir deste:

  • Tudo funciona bem, um resultado comum;
  • Seu aplicativo continua a reclamar, pode haver um web.config em uma pasta pai que você está herdando, considere limpar esse web.config também;
  • Você se cansa de remover o httpHandlers e httpModules que os novos pacotes continuam a acrescentar a system.web, mas é tudo o que você precisa fazer.

3. Se essas opções não funcionam ou causam mais problemas do que realmente vale a pena, então eu não vou dizer-lhe que você não pode definir validateIntegratedModeConfiguration a false, mas pelo menos você sabe o que está fazendo e por que é importante.

Bom lê:

· Alterações no ASP.NET 2.0 no IIS 7.0
· Integração do ASP.NET com o IIS 7
· Manipuladores de HTTP e módulos HTTP

quinta-feira, 18 de março de 2010

Acessando o Active Directory (LDAP) com ASP.Net - Parte 4 - Adicionando Dados a um atributo

Autor: Rafael Maia
Fonte:http://rafaelfranklinmaia.blogspot.com/search/label/Active%20Directory

Segue mais um código para manipulação de informações em base LDAP utilizando o .net.

O código é bem parecido com o código para atualização de dados. Mas ao invés de alterarmos um valor existente, iremos adicionar um novo valor ao atributo.

Dim recurso As New DirectoryEntry("LDAP://10.190.1.25")
Dim busca As New DirectorySearcher(recurso)
Dim resultado As SearchResult

'Você pode alterar o critério da busca para o critério que for melhor para sua aplicação.
busca.Filter = "(sAMAccountName=RafaelMaia)"
resultado = busca.FindOne()


'Adicionando o valor
Dim oDe As DirectoryEntry = Resultado.GetDirectoryEntry
oDe.Properties("mail").add("rafael@email.com.br")
oDe.CommitChanges()
oDe.Close()



Um abraço e até a próxima!!

Acessando o Active Directory (LDAP) com ASP.Net - Parte 3 - Alterando dados do usuário

Autor: Rafael Maia
Fonte:http://rafaelfranklinmaia.blogspot.com/search/label/Active%20Directory

Voltando ao assunto Active Directory.
Hoje estarei publicando um código para alteração dos atributos de um usuário em uma base LDAP.

A primeira coisa a fazer é carregar os dados do usuário que queremos alterar os dados.


Dim recurso As New DirectoryEntry("LDAP://10.190.1.25")
Dim busca As New DirectorySearcher(recurso)
Dim resultado As SearchResult
busca.Filter = "(sAMAccountName=RafaelMaia)"
resultado = busca.FindOne()

Em seguida, iremos para a alteração de fato.


Dim oDe As DirectoryEntry = Resultado.GetDirectoryEntry
oDe.Properties("mail")(0) = "rafael@email.com.br"
oDe.CommitChanges()
oDe.Close()


Pronto! O código acima altera o atributo "mail" diretamente na sua base LDAP.
Para alterar qualquer outro atributo basta trocar o nome da propriedade "mail" por qualquer outra propriedade.

Não esqueçam de importar o namespace System.DirectoryServices e das permissões necessárias para efetuar essas operações no LDAP.

Um abraço e até a próxima!!

Acessando o Active Directory (LDAP) com ASP.Net - Parte 2 - Adicionando e Removendo um usuário de um grupo

 

Autor: Rafael Maia
Fonte:http://rafaelfranklinmaia.blogspot.com/2009/10/acessando-o-active-directory-ldap-com.html


Hoje estarei dando continuidade ao assunto Active Directory.
Em uma das aplicações que estive desenvolvendo foi necessário manipular o grupo ao qual um usuário pertence.

Segue o código para adicionar e remover um usuário de um grupo no Active Directory.

Adicionando usuário ao grupo:


        Dim rootEntry As New DirectoryEntry("LDAP://10.190.1.25")
        Dim Mysearcher As New DirectorySearcher(rootEntry)
        Mysearcher.SearchRoot = rootEntry
        Mysearcher.Filter = "(&(objectCategory=group)(CN=Grupo_Teste))"
        Dim result As SearchResult = Mysearcher.FindOne()
        Dim g As DirectoryEntry = result.GetDirectoryEntry()

        Dim busca As New DirectorySearcher(rootEntry)
        busca.Filter = "(sAMAccountName=RafaelMaia)"
        result = busca.FindOne()

        Dim user As DirectoryEntry = result.GetDirectoryEntry()

        g.Invoke("Add", New [Object]() {user.Path})
        g.CommitChanges()

        g.Close()
        g.Dispose()

        user.Close()
        user.Dispose()

        Mysearcher.Dispose()
        rootEntry.Close()
        rootEntry.Dispose()

No código acima estou adicionando o usuário RafaelMaia ao grupo Grupo_Teste.
Se você tentar adicionar um usuário a um grupo que ele já pertence, ocorrerá uma exception.

Por isso, é importante validar se o usuário já pertence ao grupo antes de adicioná-lo.
Isso pode ser feito facilmente utilizando o código postado no artigo anterior.
Basta consultar os dados do usuário e verificar a propriedade "MemberOf".
Esta propriedade retorna um array de string contendo todos os grupos que o usuário pertence.

Removendo usuário do grupo:


        Dim rootEntry As New DirectoryEntry("LDAP://10.190.1.25")
        Dim Mysearcher As New DirectorySearcher(rootEntry)
        Mysearcher.SearchRoot = rootEntry
        Mysearcher.Filter = "(&(objectCategory=group)(CN=Grupo_Teste))"
        Dim result As SearchResult = Mysearcher.FindOne()
        Dim g As DirectoryEntry = result.GetDirectoryEntry()

        Dim busca As New DirectorySearcher(rootEntry)
        busca.Filter = "(sAMAccountName=RafaelMaia)"
        result = busca.FindOne()

        Dim user As DirectoryEntry = result.GetDirectoryEntry()

        g.Invoke("Remove", New [Object]() {user.Path})
        g.CommitChanges()

        g.Close()
        g.Dispose()

        user.Close()
        user.Dispose()

        Mysearcher.Dispose()
        rootEntry.Close()
        rootEntry.Dispose()


Reparem que os códigos são praticamente idênticos. Alterando somente a linha a seguir:
        g.Invoke("Remove", New [Object]() {user.Path})

Antes de excluir um usuário do grupo, verifique se o mesmo pertence realmente ao grupo em questão.
Caso tente excluir um usuário que não pertence ao grupo, ocorrerá uma exception.

É muito importante também que o usuário que está rodando sua aplicação tenha permissões para executar esta operação no active directory.

Um abraço e até a próxima!!

Acessando o Active Directory (LDAP) com ASP.Net - Parte 1 - Consultando dados de um usuário

Autor: Rafael Maia
Fonte:http://rafaelfranklinmaia.blogspot.com/search/label/Active%20Directory
É muito comum criarmos aplicações que façam uso da estrutura do Active Directory para autenticar usuários ou validar regras de acesso. Para isso, o .Net fornece classes para manipulação de dados dentro de bases LDAP (Lightweight Directory Access Protocol)

Segue um exemplo de como consultar dados de um usuário direto de uma base de dados LDAP:

        Dim de As New DirectoryEntry("LDAP://10.190.1.25") 'Endereço do active Directory
        Dim busca As New DirectorySearcher(de)
        Dim resultado As SearchResult
        busca.Filter = "(sAMAccountName=RafaelMaia)"
        resultado = busca.FindOne()
        Response.Write results.Properties("mail")(0)


O código acima irá consultar os dados do usuário RafaelMaia e escrever na tela o email do mesmo.
Pode-se acessar qualquer informação cadastrada no perfil do usuário no Active Directory.
Desde o Nome até telefones de contato. Só não se pode recuperar a senha do usuário, por razões óbvias.

É importante importar o namespace System.DirectoryServices.

Imports System.DirectoryServices


No link abaixo você pode visualizar uma lista completa de todas as propriedades do Active Directory.
http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm

A seguir um exemplo de como validar o login e senha de um usuário diretamente no AD.


Dim de As New DirectoryEntry(Nothing, "dominio\RafaelMaia", "senha_do_usuario")
        Try
            Dim o = de.NativeObject
            Dim ds As New DirectorySearcher(de)
            ds.Filter = "samaccountname=RafaelMaia"
            ds.PropertiesToLoad.Add("cn")
            Dim sr As SearchResult
            sr = ds.FindOne()
            If IsNothing(sr) Then Throw New Exception()
            Response.write("Login válido!")
        Catch ex As Exception
            Response.write("Login e/ou senha  inválidos!")
        End Try

Por agora é tudo

sexta-feira, 26 de setembro de 2008

ERRO 500 IIS - ERRO 36 e 10001 e 10010.doc

1. RESUMO DOS ERROS ENCONTRADOS

Erro no Browser depois de desligar “Mensagens de erro amigável”

“Não é possível apresentar a página
A página à qual está a tentar aceder tem um problema, pelo que não é possível apresentá-la.
HTTP 500 - Erro interno de servidor Internet Explorer “

Desligar “Mostrar mensagens de erro de http amigáveis”.

Erro no Browser depois de desligar “Mostrar mensagens de erro de http amigáveis”.

“Server Application Error
The server has encountered an error while loading an application during the processing of your request. Please refer to the event log for more detail information. Please contact the server administrator for assistance.”

Erro no FileMonitor (Portugal é nome da máquina.)

1 14:31:19 svchost.exe:712 OPEN C:\WINDOWS\system32\dllhost.exe ACCESS DENIED PORTUGAL\IWAM_PORTUGAL
2 14:31:19 svchost.exe:712 OPEN C:\WINDOWS\system32\dllhost.exe ACCESS DENIED PORTUGAL\IWAM_PORTUGAL

Registo de EVENTOS

Tipo de evento: Aviso
Origem do evento: W3SVC
Categoria do evento: Nenhum
ID do evento: 36
Data: 27-05-2008
Hora: 14:23:51
Utilizador: N/D
Computador: PORTUGAL
Descrição:
O servidor não conseguiu carregar a aplicação '/LM/W3SVC/1/ROOT'. O erro foi 'Erro de acesso geral negado
'.
Para obter informações adicionais específicas desta mensagem, visite o site de suporte online da Microsoft localizado em: http://www.microsoft.com/contentredirect.asp.
Para mais informações, consulte o 'Centro de ajuda e suporte' em http://go.microsoft.com/fwlink/events.asp.

Tipo de evento: Erro
Origem do evento: DCOM
Categoria do evento: Nenhum
ID do evento: 10001
Data: 27-05-2008
Hora: 14:23:51
Utilizador: NT AUTHORITY\SYSTEM
Computador: PORTUGAL
Descrição:
Não foi possível iniciar um servidor DCOM: {99169CB1-A707-11D0-989D-00C04FD919C1} como ./IWAM_PORTUGAL. O erro:
"O acesso é negado. "
Ocorreu ao iniciar este comando:
C:\WINDOWS\system32\dllhost.exe /Processid:{3D14228D-FBE1-11D0-995D-00C04FD919C1}
Para mais informações, consulte o 'Centro de ajuda e suporte' em http://go.microsoft.com/fwlink/events.asp.

2. Corrigir então as permissões NTFS e direitos de utilizador para um servidor Web do IIS 5.0

“How to set required NTFS permissions and user rights for an IIS 5.0 Web server”

http://support.microsoft.com/kb/271071/en-us/#appliesto

Conceder a propriedade e permissão para o administrador e para o sistema

Para atribuir permissões para o sistema:

1. Abra o Explorador do Windows.. Para efectuar este procedimento, clique em Iniciar , clique em Programas , e em seguida, clique em Explorador do Windows .
2. Expanda o meu computador .
3. Clique com o botão direito do rato na unidade de sistema (isto é normalmente a unidade C), e em seguida, clique em Propriedades
4. Faça clique sobre o separador de segurança e em seguida, clique em Avançadas para abrir a caixa de diálogo Definições de controlo para disco local de acesso
5. Faça clique sobre o separador Proprietário , clique para seleccionar a caixa de verificação Substituir proprietário em sub contentores e objectos e em seguida, clique em Aplicar .
Se receber a seguinte mensagem de erro, clique em ' continuar ' :
Ocorreu um erro ao aplicar informações de segurança para %systemdrive%\Pagefile.sys
6. Se receber a seguinte mensagem de erro, clique em Sim :
Não tem permissão para ler o conteúdo do directório %systemdrive%\System Volume Information - tarefa que pretende substituir a permissão de directório-All permissão conceder Controlo total (Full Control) que será substituído.
7. Clique em OK para fechar a caixa de diálogo.
8. Clique em Adicionar .
9. Adicionar os seguintes utilizadores, e seguida, conceda-los a permissão NTFS Controlo total:
• Administrador
• Sistema
• Proprietário criador
10. Depois de ter adicionado estas permissões NTFS, clique em Avançadas , clique para seleccionar a caixa de verificação Repor permissões em todos os objectos subordinados e permitir a propagação de permissões herdáveis e em seguida, clique em Aplicar .
11. Se receber a seguinte mensagem de erro, clique em ' continuar ' :
Ocorreu um erro ao aplicar informações de segurança para %systemdrive%\Pagefile.sys
12. Depois é ter repor as permissões do NTFS, clique em OK .
13. Clique no grupo Todos (Everyone) , clique em Remover , e em seguida, clique em OK .
14. Abra as propriedades para a pasta c:\Programas\Ficheiros ficheiros %SystemDrive%\Program, e em seguida, clique na. segurança adicionar a conta que é utilizada para acesso anónimo.
Por predefinição, este é IUSR_ <MachineName> Conta. Em seguida, adicione o grupo Utilizadores. Certifique-se que apenas o seguinte estão seleccionados:
• Ler & executar
• Listar conteúdo das pastas
• Ler
15. Abra as propriedades para o directório de raiz que contém a Web de conteúdo. Por predefinição, esta é a pasta %systemdrive%\Inetpub\Wwwroot. Clique no separador Segurança, adicionar IUSR_ <MachineName> Conta e o utilizadores agrupar, e certifique-se de que apenas o seguinte estão seleccionados:
• Ler & executar
• Listar conteúdo das pastas
• Ler
16. Se a quem pretende conceder permissão Escrever NTFS para Inetpub\FTProot ou o caminho de directório para o local de FTP ou sites, repita o passo 15.
 
Desactive a herança nos directórios de sistema
1. Na pasta %SystemRoot%\System32, seleccione todas as pastas, excepto o seguinte procedimento:
• Inetsrv
• Certsrv (se presente)
• Com
2. Clique com o botão direito do rato as restantes pastas, clique em Propriedades e, em seguida, clique no separador Segurança.
3. Clique para desmarcar a caixa de verificação Permitir as permissões herdáveis , faça clique sobre Copiar , e em seguida, clique em OK .
4. Na pasta % SystemRoot % seleccione todas as pastas, excepto o seguinte procedimento:
• Assemblagem (se presente)
• Ficheiros de programa transferidos
• Ajudar a
• Microsoft.NET (se presente)
• Páginas Web offline
• SYSTEM32
• Tarefas
• TEMP
• Web
5. Clique com o botão direito do rato as restantes pastas, clique em Propriedades e, em seguida, clique no separador Segurança .
6. Clique para desmarcar a caixa de verificação Permitir as permissões herdáveis , faça clique sobre Copiar , e em seguida, clique em OK .
7. Aplicar permissões ao seguinte procedimento:
a). Abrir as propriedades para a pasta % SystemRoot %, clique no separador Segurança (Security), adicione os IUSR_ <MachineName> e IWAM_ <MachineName> contas e o utilizadores agrupar, e certifique-se de que apenas o seguinte estão seleccionados:
• Ler & executar
• Listar conteúdo das pastas
• Ler
 
b). Abertas as propriedades para a pasta %SystemRoot%\Temp, seleccione a IUSR_ <MachineName> Conta (esta conta está já presente uma vez que herda a partir da pasta Winnt), e em seguida, clique para seleccionar a caixa de verificação modificar. Repita este passo para o IWAM_ <MachineName> Conta e o grupo Utilizadores.
 
c). Se Clients extensão do servidor do FrontPage como, por exemplo, o FrontPage ou Microsoft Visual InterDev estiverem a ser utilizados, abra as propriedades para a pasta %systemdrive%\Inetpub\Wwwroot, seleccione o grupo Utilizadores autenticados , seleccione o seguinte, e em seguida, clique em OK :
• Modificar
• Ler & executar
• Listar conteúdo das pastas
• Ler
• Escrever

3. Registo de Eventos

Ao tentarmos aceder a http://localhost/iisstart.asp continuamos com os mesmos erros no browser. Quanto ao filemon.exe da sysinternals já não dá erros de “ACCESS DENIED” .
 
Se verificarmos agora o registo de eventos deixamos de ter o erro com o id 10001 e passamos a ter o erro com o id 10010.
 
O evento tipo aviso com id 36 mantêm-se

Tipo de evento: Erro
Origem do evento: DCOM
Categoria do evento: Nenhum
ID do evento: 10010
Data: 27-05-2008
Hora: 15:09:52
Utilizador: NT AUTHORITY\SYSTEM
Computador: PORTUGAL
Descrição:
O servidor {3D14228D-FBE1-11D0-995D-00C04FD919C1} não foi registado no DCOM dentro do tempo de espera requerido.
Para mais informações, consulte o 'Centro de ajuda e suporte' em http://go.microsoft.com/fwlink/events.asp.

3. Correção do Problema: páginas ASP não são processadas, e evento DCOM 10010 aparece no registo de eventos do sistema

http://support.microsoft.com/kb/327153/en-us/
Este erro é de resolução simples e ocorre porque as entradas dos utilizadores AUTHORITY\Authenticated NT e/ou AUTHORITY\INTERACTIVE NT (Select Users) ter sido removidas do grupo Utilizadores.
 
Resolução
Adicione estes utilizadores novamente ao grupo Utilizadores, e em seguida, reinicie Internet Information Services (IIS):
1. Clique em Iniciar , clique em Programas (Programs ), clique em Ferramentas administrativas e, em seguida, clique em Gestão de computadores para abrir a consola Gestão de computadores.
2. No painel esquerdo, expanda Utilizadores e grupos locais , e, em seguida, clique na pasta Grupos .
3. No painel direito, faça clique com o botão direito do rato sobre o grupo Utilizadores , e em seguida, clique em Propriedades .
4. Clique em Adicionar .
5. Na caixa de diálogo Seleccionar utilizadores ou grupos , localize a caixa pendente Procurar em , e em seguida, seleccione o computador local.
6. Seleccione Utilizadores autenticados , e clique em Adicionar . Seleccione Interactive , e clique em Adicionar . Clique em OK , clique em Aplicar e, em seguida, clique em Fechar para fechar as propriedades para o grupo Utilizadores.
7. No painel esquerdo, expanda Serviços e aplicações , e em seguida, clique em Serviços .
8. No painel direito, clique com o botão direito do rato IIS Admin Service , e em seguida, clique em Reiniciar .
9. Na caixa de diálogo de confirmação Reiniciar outros serviços , clique em Sim .
10.Testar
Ir ao browser, digitar http://localhost/iisstart.asp. e já está