Pergunta

Estou usando uma DLL nativa (FastImage.dll) em um serviço Web C# ASP.NET que às vezes bloqueia (não é possível excluí-la --- diz acesso negado);isso requer parar o IIS para excluir a DLL.A incapacidade de excluir esta DLL na pasta bin do meu serviço Web publicado me impede de publicar com sucesso (mesmo que ele pense que foi publicado com sucesso!), o que dificulta o desenvolvimento e a correção do bug (especialmente quando ele simplesmente executa código antigo desde meu as alterações podem não ser refletidas no servidor!).Observe que o bug que faz com que o serviço da Web bombardeie e bloqueie a DLL está no meu código, que está fora da referida DLL, então acho que este é um problema mais geral do que apenas a biblioteca FreeImage (para não trazer nenhum calor).

  1. Alguém já passou por isso?
  2. Existe uma maneira de garantir que quando diz "Publicação bem-sucedida" no VS IDE isso realmente significa isso, ou executar uma espécie de script para verificar se os arquivos foram realmente excluídos antes de tentar publicar (como uma pré-construção passo em VC++).(No momento, excluo manualmente os arquivos antes de publicar para ter certeza de que as DLLs foram substituídas, em vez de executar DLLs antigas.Ainda é um problema se eu não conseguir excluir a DLL.)
  3. Como eu detectaria se um arquivo foi excluído com êxito de um arquivo em lote?(para que eu possa parar e iniciar o IIS se falhar)
  4. É possível parar e iniciar o IIS a partir de um script (de preferência do Publish...ação no IDE do VS) e em caso afirmativo, como?
Foi útil?

Solução

Usar a ferramenta de linha de comando IISReset reiniciará o IIS apenas na máquina local, e não em um servidor remoto no qual você está publicando.

Supondo que você esteja publicando em um servidor Windows 2003, sugiro tentar a etapa um pouco menos drástica de parar e reiniciar o AppPool do IIS no site ou na pasta virtual na qual o serviço da Web é executado.(Dessa forma, você não colocará todos os sites executados no servidor de destino off-line.) Isso também pressupõe que o serviço da Web seja executado em seu próprio pool de aplicativos.Idealmente deveria, então você o mantém isolado.

Eu recomendo deixar de usar o processo de publicação e usar um projeto de implantação da Web.Aqui está uma postagem no blog do ScottGu detalhando Projetos de implantação da Web VS 2005.

A vantagem da abordagem do Web Deployment Project é que ela fornece todo o poder e capacidade do MSbuild, já que na verdade é apenas um wrapper conveniente do MSBuild.Aqui está uma postagem da equipe do MSBuild sobre recursos de pré-construção e pós-construção

Espero que isto ajude.

Outras dicas

Você pode usar a ferramenta de linha de comando IISReset para parar/reiniciar o iis.Portanto, você pode escrever um arquivo em lote simples para parar o iis, copiar seus arquivos e reiniciar o iis.No entanto, não tenho certeza de como integrar isso ao recurso de publicação do VS.

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