Viene visualizzato un errore System.IO.FileNotFoundException quando l'applicazione client chiama un servizio Web
Questo articolo consente di risolvere il problema che System.IO.FileNotFoundException
si verifica quando un'applicazione Web ASP.NET chiama un servizio Web.
Versione originale del prodotto: ASP.NET
Numero KB originale: 823196
Sintomi
Quando si chiama un servizio Web in un'applicazione Web ASP.NET, è possibile che venga visualizzato l'errore seguente:
System.IO.FileNotFoundException
Causa
È possibile che venga visualizzato l'errore se si verifica una delle condizioni seguenti:
Il processo di lavoro non dispone delle autorizzazioni per la lettura nella directory Temp del processo e il processo di lavoro non dispone delle autorizzazioni per scrivere nella directory Temp del processo.
Nota
La
XmlSerializer
classe genera e compila codice in tempo reale per eseguire la serializzazione e la deserializzazione.XmlSerializer
usa Code Document Object Model (CodeDom) per eseguire la compilazione. La compilazione CodeDom usa file temporanei in un disco. Se il processo di lavoro non dispone delle autorizzazioni di lettura per la directory Temp e delle autorizzazioni di scrittura nella directory Temp, tutte le chiamate al servizio Web hanno esito negativo. Di conseguenza, il processo di lavoro richiede le autorizzazioni di lettura per la directory Temp e le autorizzazioni di scrittura nella directory Temp.Nel codice
XmlSerializer
generato sono presenti errori di compilazione.
Risoluzione 1: assegnare le autorizzazioni all'account del processo di lavoro nella directory Temp
Per risolvere questo problema, l'account del processo di lavoro ASP.NET (l'account ASPNET o l'account NETWORK SERVICE se l'applicazione è distribuita in Internet Information Services (IIS) 6.0) deve disporre dell'accesso in lettura e scrittura nella directory Temp.
Nota
Se si usa la rappresentazione, l'utente rappresentato deve avere accesso completo alla directory Temp.
Per assegnare le autorizzazioni necessarie all'account del processo di lavoro nella directory Temp, seguire questa procedura:
In Esplora risorse individuare .
%windir%\temp directory
Fare clic con il pulsante destro del mouse su
%windir%\temp
e quindi scegliere Proprietà.Nella finestra Proprietà selezionare la scheda Sicurezza .
Selezionare Aggiungi, digitare ServerName\ASPNET e quindi selezionare OK.
Nota
Sostituire ServerName con il nome del server Web.
Sostituire ASPNET con NETWORK SERVICE se l'applicazione è stata distribuita in IIS 6.0.
In Consenti selezionare la casella di controllo Controllo completo e quindi selezionare OK.
Risoluzione 2: trovare gli errori del compilatore nel codice generato da XmlSerializer
Per trovare gli errori generati dal compilatore, è necessario aggiungere un'opzione al file Web.config per mantenere i file generati dal compilatore. A tal fine, attenersi alla seguente procedura:
Aprire il file Web.config in un editor di testo, ad esempio blocco note.
Aggiungere un'opzione
XmlSerialization.Compilation
alla<system.diagnostics>
sezione del codice, come indicato di seguito:<configuration> <system.diagnostics> <switches> <add name="XmlSerialization.Compilation" value="4"/> </switches> </system.diagnostics> </configuration>
Eseguire l'applicazione client.
L'applicazione client chiama il servizio Web.
Verificare che la
%windir%\temp
directory contenga il file _tmpname.00.cs e il file _tmpname.out .Il file _tmpname.00.cs è l'origine generata. Nel file _tmpname.out devono essere presenti errori del compilatore.
Nota
Abilitare le autorizzazioni di lettura e abilitare le autorizzazioni di scrittura per l'account del processo di lavoro (ASPNET o NETWORK SERVICE) per scrivere
%tmpname%
file nella directory Temp.
Stato
Si tratta di un comportamento legato alla progettazione del prodotto.
Passaggi per riprodurre il comportamento
Le sezioni seguenti forniscono informazioni sui passaggi per riprodurre il comportamento.
Creare un servizio Web
Avviare Visual Studio .NET.
Creare un nuovo progetto di servizio Web ASP.NET usando Visual C# .NET o Visual Basic .NET.
Per impostazione predefinita, viene creato Service1.asmx .
Assegnare al progetto il nome WebServiceTemp.
In Esplora soluzioni fare clic con il pulsante destro del mouse su Service1.asmx e quindi scegliere Visualizza codice.
Nel file Service1.asmx.cs (o nel file Service1.asmx.vb se si usa Visual Basic .NET), rimuovere il commento dal metodo Web predefinito
HelloWorld()
.Nel menu Compila selezionare Compila soluzione.
Creare un'applicazione Web client
Creare una nuova applicazione Web ASP.NET usando Visual C# .NET o Visual Basic .NET.
Assegnare al progetto il nome WebAppTemp.
In Esplora soluzioni fare clic con il pulsante destro del mouse su Riferimenti e quindi scegliere Aggiungi riferimento Web.
Nella casella di testo Indirizzo digitare l'URL seguente per WebServiceTemp:
http://localhost/WebServiceTemp/Service1.asmx
Selezionare Vai e quindi Aggiungi riferimento.
Fare doppio clic su WebForm1 per aprire il codice dell'evento
Page_Load
.Aggiungere il codice seguente al
Page_Load
gestore eventi.Codice di esempio di Visual C# .NET
// Start an instance of the Web service client-side proxy. localhost.Service1 myProxy = new localhost.Service1(); Response.Write( myProxy.HelloWorld());
Codice di esempio di Visual Basic .NET
'Start an instance of the Web service client-side proxy. Dim myProxy As localhost.Service1 = New localhost.Service1() Response.Write(myProxy.HelloWorld())
Nel menu Compila selezionare Compila soluzione.
Impostare le autorizzazioni per la directory Temp
Per assegnare le autorizzazioni necessarie all'account del processo di lavoro nella directory Temp, seguire questa procedura:
In Esplora risorse individuare la
%windir%
directory.Fare clic con il pulsante destro del mouse su
%windir%\temp
e quindi scegliere Proprietà.Nella finestra Proprietà selezionare la scheda Sicurezza .
Selezionare Aggiungi, digitare ServerName\ASPNET e quindi selezionare OK.
Assicurarsi che la casella di controllo Scrittura non sia selezionata in Consenti e quindi selezionare OK.
Eseguire l'applicazione Web.
È possibile che venga visualizzato l'errore indicato nella sezione Sintomi di questo articolo.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per