Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa sezione offre consigli su come identificare e risolvere i problemi comuni del servizio Web.
Risoluzione di problemi generali
Abilitazione del tracciamento della procedura guidata di pubblicazione servizi Web
È possibile abilitare la traccia per eseguire il debug della Pubblicazione guidata servizi Web BizTalk annullando il commento del <nodo di aggiunta> nel file BTSWebSvcWiz.exe.config. Per ulteriori informazioni su come ottenere informazioni di traccia da Servizi Web Wizard, vedere Come modificare BTSWebSvcWiz.exe.config.
Abilitazione della traccia dei messaggi SOAP
È possibile abilitare la traccia dei messaggi SOAP per eseguire il debug dell'applicazione di pubblicazione dei servizi Web tramite un'estensione SOAP. Per altre informazioni sulle estensioni SOAP, vedere Procedura: Implementare un'estensione SOAP.
Uso dell'opzione ThrowDetailedError
Se si verifica un errore, il client Web riceve un'eccezione SoapException generica.
Per eseguire il debug del servizio Web pubblicato, è possibile aggiungere un'opzione al file web.config per controllare il livello dei dettagli dell'eccezione restituiti dal servizio Web pubblicato. L'opzione è ThrowDetailedError e, quando è impostata su True , il proxy del server restituisce informazioni sull'eccezione interna al client Web, consentendo di eseguire il debug del servizio Web pubblicato.
Il codice XML seguente mostra l'opzione ThrowDetailedError visualizzata nel file web.config nel <nodo appSettings> :
<appSettings>
<add key="ThrowDetailedError" value="False" />
<appSettings/>
Avvertimento
L'eccezione interna può contenere informazioni riservate. Dopo il debug, è necessario impostare l'opzione ThrowDetailedError su False.
Uso della traccia di .NET Framework per acquisire e registrare gli errori nel servizio Web
La classe System.Diagnostics.Trace di .NET Framework può essere usata per acquisire e scrivere errori in un file di testo.
Per usare la classe System.Diagnostics.Trace 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>
Annotazioni
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 a scopo di sviluppo e modificare il valore una volta completato lo sviluppo per ridurre o inibire l'output di traccia.
Creare un'istanza delle classi TraceSwitch e TextWriterTraceListener e usare un blocco di codice try…catch nel chiamare il metodo [WebMethod] del servizio Web per intercettare e scrivere errori in un file di output di traccia. Ad esempio, il codice seguente intercetta un errore generato quando si tenta di impostare la variabile di tipo intero s2 su un'istanza nulla 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."; } } }
Annotazioni
Questo codice è una versione modificata del servizio Web HelloWorld generata per impostazione predefinita quando si crea un nuovo progetto di servizio Web ASP.Net in Visual Studio.
Annotazioni
Per Windows Vista, i privilegi di amministratore potrebbero essere necessari per scrivere il file di output di traccia nella cartella radice.
Ricompilare 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.
Domande e risposte generali per la risoluzione dei problemi
Questa sezione contiene un set di domande e risposte progettate per risolvere i problemi relativi ai servizi Web.
Si ricevono errori durante l'utilizzo di un servizio Web; come posso evitarli?
Quando si usa un servizio Web sono disponibili molti dettagli, tra cui i seguenti:
Evitare di usare due caratteri di sottolineatura in un nome di parametro.
L'uso di qualsiasi elemento o attributo anyAttribute non è supportato nei metodi Web.
Evitare di usare parole chiave XLANG/s come nome del servizio Web o nome del metodo Web.
Evitare di usare tipi di parametri del metodo Web non supportati da XLANG/s.
Non usare nomi di elementi che sono parole chiave C# o non saranno validi come identificatore C# negli schemi.
Evitare file WSDL (Web Services Description Language) con più definizioni di tipo di servizio o porta.
I parametri del metodo Web devono essere Xml Serializable.
Evitare riferimenti a servizi Web consumati che contengono schemi con più radici.
Evitare di fare riferimento ai servizi Web con metodi Web che prevedono parametri generici, ad esempio parametri nullable.
L'elemento di importazione WSDL non è supportato.
Per altre informazioni su queste e considerazioni correlate, vedere Considerazioni sull'utilizzo di servizi Web.
Perché si ricevono errori durante la pubblicazione dello schema che usa l'elemento <include> ?
Gli schemi non possono essere pubblicati se includono riferimenti circolari (lo schema incluso include un elemento include allo schema incluso) o hanno un attributo schemaLocation non risolto.
Per ulteriori informazioni sulla limitazione dell'elemento include, vedere Include Element Binding Support. Per ulteriori informazioni sulla limitazione del supporto di binding dell'elemento include. La Pubblicazione guidata servizi Web presenta le stesse limitazioni di XSD.exe in .NET Framework 2.0; per altre informazioni, vedere Import Element Binding Support.
Perché si ricevono errori durante la pubblicazione dello schema della busta?
Se si dispone di uno schema envelope che si pubblica come servizio Web, è necessario modificare manualmente il progetto Web generato.
Per modificare il progetto Web generato per gli schemi envelope
Aprire il <file myWebService>.asmx.cs.
Modificare il file e passare
bodyTypeAssemblyQualifiedName = <dll.name.version>
abodyTypeAssemblyQualifiedName = null
Annotazioni
Potrebbe essere necessario reimpostare Internet Information Services (IIS) se il file di .dll precedente è ancora presente nel processo di lavoro ASP.NET.
I client dei servizi Web pubblicati potrebbero non ricevere errori di timeout dello script del server
Se i client Web che utilizzano il .NET Framework chiamano un servizio Web generato tramite la Creazione guidata per la pubblicazione di servizi Web di BizTalk Server, è possibile che il client non riceva errori di timeout dello script del server perché, per impostazione predefinita, il timeout della richiesta del client si verifica per primo. Per risolvere questo problema, è possibile eseguire una delle operazioni seguenti:
Aumentare il timeout della richiesta client a un valore maggiore del timeout dello script del server aumentando il valore per la proprietà HttpWebRequest.Timeout nel client.
Ridurre il timeout dello script del server a un valore inferiore al timeout della richiesta client riducendo il valore per la proprietà HttpServerUtility.ScriptTimeout nel server.
Errori comuni
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).
Motivo
Questo errore può verificarsi se ASP.NET non è installato e/o abilitato nel server IIS che ospita il servizio Web.
Risoluzione
Assicurarsi che ASP.NET sia installato e abilitato. 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.
I campi data vengono rimossi dai documenti elaborati da un servizio Web generato con la Guidata alla Pubblicazione dei Servizi Web di BizTalk Server.
Problema
Quando si elabora un documento con un servizio Web generato con la Pubblicazione guidata servizi Web di BizTalk Server, qualsiasi dato contenuto in un campo con tipo di datixs:date viene rimosso dal documento.
Motivo
Questo problema può verificarsi se l'orchestrazione pubblicata contiene uno schema con uno o più campi con tipo di datixs:date e una proprietà Nillable di True.
Soluzione
Per risolvere questo problema, individuare i campi nello schema pubblicato con tipo di datixs:date e verificare che la proprietà Nillable di questi campi sia impostata su False.
Un errore "System.IO.FileNotFoundException" si verifica quando viene chiamato un servizio Web
Problema
Quando si chiama un servizio Web in un'applicazione Web di Microsoft ASP.NET, è possibile che venga visualizzato l'errore seguente:
System.IO.FileNotFoundException
Motivo
Questo errore può verificarsi se una delle condizioni seguenti è vera:
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 la scrittura nella directory temp del processo.
Nel codice generato da XmlSerializer sono presenti errori di compilazione.
Risoluzione
Questo errore è documentato nell'articolo della Microsoft Knowledge Base 823196. Per risolvere questo errore, seguire la procedura descritta nella sezione Risoluzione di questo articolo della Knowledge Base.