웹 서비스의 예외로 인해 DLL이 잠기고 게시가 차단됩니다.해결 방법?
-
09-06-2019 - |
문제
C# ASP.NET 웹 서비스에서 기본 DLL(FastImage.dll)을 사용하고 있는데 가끔 잠깁니다(삭제할 수 없습니다. 액세스가 거부되었다고 표시됨).DLL을 삭제하려면 IIS를 중지해야 합니다.게시된 웹 서비스의 bin 폴더에서 이 DLL을 삭제할 수 없기 때문에 성공적으로 게시할 수 없습니다(성공적으로 게시되었다고 생각하더라도!). 이는 개발 및 버그 수정을 어렵게 만듭니다(특히 이전 코드를 행복하게 실행하는 경우). 변경사항이 서버에 반영되지 않을 수 있습니다!)웹 서비스가 DLL을 폭파하고 잠그게 만드는 버그는 해당 DLL 외부에 있는 내 코드에 있으므로 이것이 FreeImage 라이브러리보다 더 일반적인 문제라고 생각합니다(열을 발생시키지 않음).
- 누구든지 이것을 경험 했습니까?
- VS IDE에서 "게시 성공"이라는 메시지가 실제로 의미하는지 확인하거나 일종의 스크립트를 실행하여 게시를 시도하기 전에 파일이 실제로 삭제되었는지 확인하는 방법이 있습니까(예: 사전 빌드) VC++의 단계).(지금은 이전 DLL을 실행하는 대신 DLL이 교체되었는지 확인하기 위해 게시하기 전에 파일을 수동으로 삭제합니다.DLL을 삭제할 수 없다면 여전히 문제가 됩니다.)
- 배치 파일에서 파일이 성공적으로 삭제되었는지 어떻게 알 수 있나요?(실패하면 IIS를 중지했다가 시작할 수 있습니다)
- 스크립트(가급적이면 게시...)에서 IIS를 중지하고 시작할 수 있습니까?VS IDE에서의 작업) 그렇다면 어떻게 해야 합니까?
해결책
IISReset 명령줄 도구를 사용하면 게시하려는 원격 서버가 아닌 로컬 컴퓨터에서만 IIS가 다시 시작됩니다.
Windows 2003 서버에 게시한다고 가정하면 웹 서비스가 실행되는 웹 사이트나 가상 폴더에서 IIS AppPool을 중지했다가 다시 시작하는 약간 덜 과감한 단계를 시도하는 것이 좋습니다.(그러면 대상 서버에서 실행되는 모든 사이트를 오프라인으로 전환하지 않습니다.) 이 역시 웹 서비스가 자체 앱 풀에서 실행된다고 가정합니다.이상적으로는 그래야 하므로 격리된 상태로 유지해야 합니다.
게시 프로세스를 사용하는 것에서 벗어나 웹 배포 프로젝트를 사용해 보는 것이 좋습니다.다음은 ScottGu의 블로그에 대한 자세한 내용입니다. VS 2005 웹 배포 프로젝트.
웹 배포 프로젝트 접근 방식의 장점은 MSBuild가 실제로 MSBuild를 둘러싼 편리한 래퍼이므로 MSbuild의 모든 성능과 기능을 제공한다는 것입니다.다음은 MSBuild 팀의 게시물입니다. 사전 빌드 및 사후 빌드 기능
도움이 되었기를 바랍니다.
다른 팁
IISReset 명령줄 도구를 사용하여 iis를 중지/다시 시작할 수 있습니다.따라서 iis를 중지하고 파일을 복사한 다음 iis를 다시 시작하는 간단한 배치 파일을 작성할 수 있습니다.그러나 이것을 VS 게시 기능과 통합하는 방법을 잘 모르겠습니다.