Risoluzione dei problemi relativi ai servizi Web
Microsoft BizTalk Server usa ampiamente i servizi Web per l'uso con l'adattatore SOAP e per la pubblicazione di orchestrazioni come servizi Web. In questo argomento vengono descritti alcuni problemi frequenti relativi ai servizi Web nonché le procedure che consentono di risolverli.
Utilizzo del meccanismo di analisi di .NET Framework per acquisire e registrare errori in un servizio Web
La classe .NET Framework System.Diagnostics.Trace può essere usata per acquisire e scrivere errori in un file di testo.
Per utilizzare la classe System.Diagnostics.Trace di .NET Framework per acquisire e scrivere errori in un file di testo
Aggiornare il file web.config per il servizio Web per impostare la direttiva del compilatore TRACE su true e aggiungere un valore TraceSwitch :
<?xml version="1.0"?> <configuration> <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" compilerOptions="/d:TRACE" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="1" /> </compilers> </system.codedom> <system.diagnostics> <switches> <add name="WebSvcTraceSwitch" value="2" /> <!-- Set to 0, 1, 2, 3, or 4, which corresponds to TraceLevel.Off, TraceLevel.Error, TraceLevel.Warning TraceLevel.Info, and TraceLevel.Verbose. --> </switches> </system.diagnostics> </configuration>
Nota
Se la direttiva del compilatore TRACE non è impostata su true , non verrà generato alcun output di traccia. Il valore TraceSwitch può essere impostato anche nella classe chiamante, ma è impostato qui nel file web.config per praticità. Impostare il valore TraceSwitch sul livello appropriato per scopi di sviluppo e modificare il valore dopo il completamento dello sviluppo per ridurre o inibire l'output di traccia.
Creare un'istanza delle classi TraceSwitch e TextWriterTraceListener e usare un tentativo... catch block nel servizio Web [WebMethod] chiama per intercettare e scrivere errori in un file di output di traccia. Nel codice seguente, ad esempio, viene individuato un errore generato quando si tenta di impostare la variabile di tipo integer s2 su un'istanza con valore null della variabile oggetto o2:
using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Diagnostics; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Service : System.Web.Services.WebService { TraceSwitch WebSvcTraceSwitch = new TraceSwitch("WebSvcTraceSwitch", "Web Service Trace"); TextWriterTraceListener TestTracer = new TextWriterTraceListener("C:\\traceout.txt"); // Note that by default the local ASPNET account(IIS 5.x) or the // local NETWORK SERVICE account(IIS 6.0) needs write access to // this directory so that the instance of the // TextWriterTraceListener can write to the trace output file. ); public Service () { } [WebMethod] public string HelloWorld() { string h2 = "Hello World"; //object o2 = 1; object o2 = null; try { int s2 = (int)o2; //Error if o2 set to null return h2; } catch(Exception e) { Trace.Listeners.Add(TestTracer); Trace.WriteLineIf(WebSvcTraceSwitch.Level = TraceLevel.Warning, "Exception caught: " + e.Message); //Writes to the trace file if specified TraceLevel switch value (in web.config) >= 2 TestTracer.Dispose(); return "An error occurred in the Web service, please contact the web server administrator."; } } }
Nota
Questo codice è una versione modificata del servizio Web HelloWorld predefinito generato quando si crea un nuovo progetto di servizio Web ASP.Net in Microsoft Visual Studio.
Nota
In Windows Vista potrebbe essere necessario disporre dei privilegi di amministratore per scrivere un file di output di analisi nella cartella radice.
Rigenerare il progetto del servizio Web. A questo punto, se si verifica un errore nell'istruzione Try , l'eccezione viene gestita nell'istruzione Catch e viene scritto un errore nel file di output della traccia.
Problemi noti
Un servizio Web restituisce un errore HTTP 404 (File non trovato)
Problema
I tentativi di chiamare un servizio Web restituiscono un errore HTTP 404 (File non trovato).
Causa
Questo errore può verificarsi se ASP.NET non è installato e/o attivato nel server IIS in cui si trova il servizio Web.
Risoluzione
Accertarsi che ASP.NET sia installato e attivato. Installare .NET Framework se non è installato ed eseguire il programma aspnet_regiis.exe che si trova nella cartella %WinDir%\Microsoft.NET\Framework\vXXX.XXX\ del server IIS.
Si verifica un errore "System.IO.FileNotFoundException" quando viene chiamato un servizio Web
Problema
Quando si chiama un servizio Web in un'applicazione Microsoft ASP.NET, è possibile che si verifichi l'errore seguente:
System.IO.FileNotFoundException
Causa
Questo errore può verificarsi in presenza di una delle condizioni seguenti:
Il processo di lavoro non dispone delle autorizzazione di lettura e scrittura della directory Temp del processo.
Vi sono errori di compilazione nel codice generato da XmlSerializer.
Risoluzione
Questo errore è documentato in PRB: viene visualizzato un errore "System.IO.FileNotFoundException" quando l'applicazione client chiama un servizio Web.
Vedere anche
Linee guida per la risoluzione dei problemi relativi alle autorizzazioni di IISper la risoluzione dei problemi relativi alle autorizzazioni dei servizi Web