J'ai un service WCF qui fonctionne au format brut, en utilisant les flux:Supprimer le fichier temporaire après son retour au format brut dans WCF
[ServiceContract]
public interface IEncryptingService
{
[WebInvoke(UriTemplate = "/")]
[OperationContract]
Stream SignDocument(Stream requestStream);
}
public class EncryptingService : IEncryptingService
{
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);
return File.Open(signedFileName, FileMode.Open, FileAccess.Read);
}
}
Maintenant, comment puis-je supprimer ce fichier après la fin WCF retourner le fichier?
J'ai essayé d'utiliser le bloc finally
, mais il est appelé juste après return
, et génère une exception, car le fichier est toujours utilisé par un processus. Bien sûr, il s'agit d'une solution de contournement comme un agent d'arrière-plan attendant la suppression d'un fichier, mais, à mon avis, ce n'est pas comme la façon dont les services Web doivent être implémentés.
Ne pouvez-vous éviter d'utiliser des fichiers en premier lieu? Juste en utilisant (en mémoire) les flux à la place? –
@ Christian.K Malheureusement, 'XmlDocumentSigner' est une enveloppe autour d'une bibliothèque DLL externe non gérée qui utilise des algorithmes très spécifiques (aucune bibliothèque alternative gérée ou non) et ne peut que signer des fichiers :( –