Condividi tramite


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

  1. 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.

  2. 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.

  3. 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