2015-01-23 22 views
7

l'esecuzione di codice in un servizio Web:NET IO Exception "Firma non valida"

using (File.OpenRead(@"\\server\file.txt")) 
{ 
    // some stuff 
} 

causano IO Exception che dice solo "Firma non valida"

io non riesco a trovare nulla tramite Google su questo errore messaggio quando si usano i metodi statici di File.

var exists = File.Exists(@"\\server\file.txt")) 

non genera un'eccezione però, che fa sembrare come si può vedere il file lì, ma non si può aprire per la lettura.

Sono davvero in perdita per ciò che "Firma invalida" sta cercando di dire in questa istanza.

Grazie.

UPDATE: "Firma non valida"

Anche usando la rappresentazione per aprire i file di lettura dal server, si getta ancora l'eccezione IO con

Stack:

<StackTrace> 
    <StackFrame Index="6"> 
    <FileName /> 
    <Method>Void RenderImages(System.String, System.Nullable`1[System.Int32])</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>88</ILOffset> 
    </StackFrame> 
    <StackFrame Index="5"> 
    <FileName /> 
    <Method>Void .ctor(System.String, Boolean)</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>0</ILOffset> 
    </StackFrame> 
    <StackFrame Index="4"> 
    <FileName /> 
    <Method>Void .ctor(System.String, System.Text.Encoding, Boolean, Int32)</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>7</ILOffset> 
    </StackFrame> 
    <StackFrame Index="3"> 
    <FileName /> 
    <Method>Void .ctor(System.String, System.Text.Encoding, Boolean, Int32, Boolean)</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>113</ILOffset> 
    </StackFrame> 
    <StackFrame Index="2"> 
    <FileName /> 
    <Method>Void .ctor(System.String, System.IO.FileMode, System.IO.FileAccess, System.IO.FileShare, Int32, System.IO.FileOptions, System.String, Boolean, Boolean, Boolean)</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>35</ILOffset> 
    </StackFrame> 
    <StackFrame Index="1"> 
    <FileName /> 
    <Method>Void Init(System.String, System.IO.FileMode, System.IO.FileAccess, Int32, Boolean, System.IO.FileShare, Int32, System.IO.FileOptions, SECURITY_ATTRIBUTES, System.String, Boolean, Boolean, Boolean)</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>998</ILOffset> 
    </StackFrame> 
    <StackFrame Index="0"> 
    <FileName /> 
    <Method>Void WinIOError(Int32, System.String)</Method> 
    <LineNumber>0</LineNumber> 
    <ColumnNumber>0</ColumnNumber> 
    <ILOffset>571</ILOffset> 
    </StackFrame> 
</StackTrace> 

Ambiente:

<Environment> 
<DateTime.Now>1/23/2015 8:50:28 AM</DateTime.Now> 
<MachineName>xxxxx</MachineName> 
<UserDomainName>xxxxx</UserDomainName> 
<UserName>xxxx</UserName> 
<Executable>w3wp.exe</Executable> 
<ExecutableTimestamp>0101.01.0000</ExecutableTimestamp> 
<CommandLine>c:\windows\system32\inetsrv\w3wp.exe -ap "xxx.xxxxx.com" -v "v4.0" -l "webengine4.dll" -a \\.\pipe\iisipm45ad21f3-41a8-4e9a-a27c-fd0c679b337a -h "C:\inetpub\temp\apppools\xxxx.xxxx.com\xxxx.xxx.com.config" -w "" -m 0 -t 20 -ta 0</CommandLine> 
<OSVersion>Microsoft Windows NT 6.3.9600.0</OSVersion> 
<WorkingSet>168112128</WorkingSet> 
<EnvironmentVersion>4.0.30319.34003</EnvironmentVersion> 

using (File.Open(@"\\server\file.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite) 

e

File.WriteAllText(destinationFile, sb.ToString()); 

where destinationFile is \\server\sharename\generatedFileName.txt 

Anche lanciare l'eccezione, a scopo di chiarimento.

+0

sei sicuro che sia un file di testo? puoi aprirlo nel blocco note e vedere chiaramente i contenuti? – Tigran

+0

È presente una proprietà InnerException popolata? –

+0

Elimina tutto il testo del percorso e ri scrivilo a mano (dovrei eliminarlo prima di '@' dopo la fine '" 'per sicurezza), inizia a funzionare? Ho avuto problemi in passato dove copia/incolla i caratteri non stampabili copiati nel percorso del file che File.Open' non è in grado di gestire.Non ricordo se l'errore che ho ricevuto era "Firma non valida" tuttavia –

risposta

0

Sono riuscito a ottenere lo stesso messaggio di errore. Penso che il seguente metodo abbia aiutato, ma potrebbe essere solo che sto costringendo l'applicazione a ricaricare ad ogni cambio. Nel mio caso, ho creato il percorso del file utilizzando una stringa da un database SQL 2000.

var folderVar = myDataRow["folderVar"].ToString(); 
var di = new DirectoryInfo("\\\\domain.website.com\\shares\\" + folderVar + "\\subdir\\");` 

Il problema fermato dopo ho cambiato il codice a qualcosa (orribile) in questo modo:

var folderVar = myDataRow["folderVar"].ToString(); 
if (folderVar == "ABC") 
{ 
    var di = new DirectoryInfo("\\\\domain.website.com\\shares\\ABC\\subdir\\");` 
} 
else if (folderVar == "BCD") 
{ 
    var di = new DirectoryInfo("\\\\domain.website.com\\shares\\BCD\\subdir\\");` 
} 

Io in genere non lavoro con la formattazione delle stringhe a livello di byte. Se la codifica è davvero il problema, c'è sicuramente una soluzione migliore.