에 원시 형식으로 반환 후 임시 파일을 제거?내가 스트림을 사용하여 원시 형식으로 작동하는 WCF 서비스를 WCF
나는 finally
블록을 사용하려고 시도했지만, return
직후에 호출되고 예외가 발생합니다. 파일은 여전히 프로세스에 의해 사용되므로 예외입니다.
물론 이것은 파일을 삭제할 수있을 때까지 기다리는 백그라운드 작업자와 같은 해결 방법이지만 웹 서비스 구현 방법과는 다릅니다.
에 원시 형식으로 반환 후 임시 파일을 제거?내가 스트림을 사용하여 원시 형식으로 작동하는 WCF 서비스를 WCF
나는 finally
블록을 사용하려고 시도했지만, return
직후에 호출되고 예외가 발생합니다. 파일은 여전히 프로세스에 의해 사용되므로 예외입니다.
물론 이것은 파일을 삭제할 수있을 때까지 기다리는 백그라운드 작업자와 같은 해결 방법이지만 웹 서비스 구현 방법과는 다릅니다.
이 솔루션은 간단히 생각할 수 없을만큼 빨리 마음에 들었고, 그것은 논리적으로 절대적입니다. 파일 내용을 메모리로 읽어 들이고 파일을 제거하기 만하면됩니다. 나는 그것을 시도하지 않은
using (var ms = new MemoryStream(signedFileBytes))
{
return ms;
}
귀하의 답변을 찾을 수있게되었습니다. 귀하의 것 또한 덜 복잡한 버전입니다! – TheLethalCoder
@ TheLethalCoder Thanks :) –
여기를 참조하십시오 : https://devdump.wordpress.com/2008/12/07/disposing-return-values/. 그들은 처분에 대해 이야기하지만, 당신은 OperationCompleted에 가입하고 거기서 당신의 파일을 삭제할 수 있습니다. 전체 파일을 메모리에 복사하는 것보다 낫습니다. – Evk
하지만 당신은 파일을 열고 다른 스트림에 그 스트림을 작성할 수 using
문이 코드를하게하는 것으로
public Stream SignDocument(Stream requestStream)
{
string originalFileName = Path.GetTempFileName();
string signedFileName = Path.GetTempFileName();
using (var originalFileStream = File.Open(originalFileName, FileMode.Create, FileAccess.Write))
{
requestStream.CopyTo(originalFileStream);
}
XmlDocumentSigner.SignFile(originalFileName, signedFileName);
byte[] signedFileBytes = File.ReadAllBytes(signedFileName);
File.Delete(signedFileName);
return new MemoryStream(signedFileBytes);
}
도 실패합니다. 같은 뭔가 :
File.Delete(signedFileName);
return ms;
당신이 처음에 파일을 사용하지 않도록 할 수 없습니다
그런 다음 당신이해야 할 모든 파일을 삭제하고
ms
돌아 호출입니까? 대신 (메모리에서) 스트림을 사용 하시겠습니까? –@ Christian.K 불행히도,'XmlDocumentSigner'는 매우 특정한 알고리즘 (관리되지 않거나 파일 기반이 아닌 대체 라이브러리가 없음)을 사용하는 외부의 비 관리 DLL 라이브러리를 감싸는 래퍼입니다. ( –