2016-09-02 6 views
0

Hier ist die Funktion i gemacht:Datei kann nicht in asp.net MVC auf IIS veröffentlicht

if (Valide()) 
{ 
    try 
    { 
     File.Delete(Server.MapPath("F16client.pdf")); 
    } 
    catch 
    { 
    } 

    using (FileStream ms = new FileStream(Server.MapPath("F16client.pdf"), FileMode.Create, FileAccess.Write, FileShare.None)) 
    { 
     PdfReader lecteur = new PdfReader(Server.MapPath("~/Formulaires/f16.pdf")); 

     PdfStamper etampeur = new PdfStamper(lecteur, ms); 

     // DO STUFF, Whatever 

     etampeur.FormFlattening = true; 
     etampeur.Close(); 
     lecteur.Close(); 

     System.Net.Mail.Attachment at = new Attachment(Server.MapPath("F16client.pdf"));            
    } 
} 

Es funktioniert, wenn die lokale Prüfung, aber auf IIS, dieser W3W Prozess wird nicht gehen mein f16client lassen. pdf und ich immer am Ende mit:

Der Prozess kann nicht die Datei ‚D: \ inetpub \ wwwroot \ Formulaire16 \ F16client.pdf‘ zugreifen, da sie von einem anderen Prozess verwendet wird.

Warum wird diese Datei immer noch auf IIS verwendet und nicht beim Testen von lokalen ??????

+0

Haben Sie die Datei anderswo geöffnet? – Jecoms

+1

Was passiert, wenn Sie diese Zeile aus der using-Anweisung entfernen? System.Net.Mail.Attachment at = neuer Anhang (Server.MapPath ("F16client.pdf")); – Sparrow

+0

Ich würde vorschlagen, Temp-Dateien stattdessen zu erstellen - es gibt ein paar Probleme mit dem Code, wie Sie es haben. –

Antwort

0

Nun ... keine Magie hier. Dank Feryal Badili für das Problem unter Hinweis darauf, eine E-Mail attachement etwas, das die Ressource tatsächlich hält ...

So ist eine einfache:

at.Dispose(); 

vor dem Ende der Funktion und alls gut. Yeah ...

Der Grund, warum es auf lokale funktionierte, ist wahrscheinlich, weil ich die stop everything Taste jedesmal drückte, die ich testete, und deshalb tötete ich den Griff jedes Mal, das es meine Funktion versuchte.

0

Überprüfen Sie den Zugriff für den Anwendungspoolbenutzer auf IIS. Versuchen Sie es erneut mit dem folgenden Code:

var file = Server.MapPath("F16client.pdf") 
File.SetAttributes(file, FileAttributes.Normal); 
File.Delete(file); 

Dies kann ein Problem mit Berechtigungen oder Dateiattributen sein.

+0

Danke zu geben Für den Rat, verifizierte ich, meine Web-Apps haben in der Regel 100% Kontrolle über die Dateien, die es besitzt (und das ist der Fall gerade jetzt), aber immer noch eine gute Praxis, um die Rechte und Attribute zu überprüfen. –

Verwandte Themen