Solución de problemas de servicios web
Microsoft BizTalk Server hace un uso extenso de los servicios web para su uso con el adaptador SOAP y al publicar orquestaciones como servicios web. Este tema proporciona algunos pasos que puede seguir para solucionar problemas de servicios Web, además de problemas habituales de algunos servicios Web y cómo solucionar dichos problemas.
Usar el seguimiento.NET Framework para capturar y registrar errores en un servicio Web
La clase System.Diagnostics.Trace de .NET Framework se puede usar para capturar y escribir errores en un archivo de texto.
Para usar la clase System.Diagnostics.Trace para capturar y escribir errores en un archivo de texto
Actualice el archivo web.config para que el servicio web establezca la directiva del compilador TRACE en true y agregue un valor 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
Si la directiva del compilador TRACE no está establecida en true , no se generará ninguna salida de seguimiento. El valor traceSwitch también se puede establecer en la clase de llamada, pero se establece aquí en el archivo web.config para mayor comodidad. Establezca el valor traceSwitch en el nivel adecuado para fines de desarrollo y cambie el valor una vez completado el desarrollo para reducir o impedir la salida del seguimiento.
Cree una instancia de las clases TraceSwitch y TextWriterTraceListener y use un try... catch block en el servicio web [WebMethod] llama a para interceptar y escribir errores en un archivo de salida de seguimiento. Por ejemplo, el siguiente código intercepta un error que se genera al intentar establecer la variable de tipo entero s2 en una instancia nula de la variable de objeto 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
Este código es una versión modificada del servicio web HelloWorld predeterminado que se genera al crear un nuevo proyecto de servicio web ASP.Net en Microsoft Visual Studio.
Nota
En Windows Vista, puede que sea necesario disponer de privilegios de administrador para escribir el archivo de salida de seguimiento en la carpeta raíz.
Vuelva a crear el proyecto de servicio Web. Ahora, si se produce un error en la instrucción Try , la excepción se controla en la instrucción Catch y se escribe un error en el archivo de salida de seguimiento.
Problemas conocidos
Servicio Web que devuelve un error HTTP 404 (Archivo no encontrado)
Problema
Intenta llamar a un servicio Web que devuelve un error HTTP 404 (Archivo no encontrado).
Causa
Este error se puede producir si ASP.NET no se instala o se habilita en el servidor IIS que aloja el servicio Web.
Resolución
Comprobar que ASP.NET se ha instalado y habilitado. Instale .NET Framework si no está instalado o ejecute el programa aspnet_regiis.exe ubicado en la carpeta %WinDir%\Microsoft.NET\Framework\vXXX.XXX\ del servidor IIS.
El error "System.IO.FileNotFoundException" se produce cuando se llama a un servicio Web
Problema
Cuando se llama a un servicio Web en una aplicación Web ASP.NET, es posible que reciba el siguiente error:
System.IO.FileNotFoundException
Causa
Este error se puede producir su se cumple alguna de las siguientes condiciones:
El proceso de trabajo no tiene permisos para leer el directorio Temp del proceso y el proceso de trabajo no tiene permiso para escribir en el directorio Temp del proceso.
Hay errores de compilación en el código que ha generado XmlSerializer.
Resolución
Este error se documenta en PRB: Recibe un error "System.IO.FileNotFoundException" cuando la aplicación cliente llama a un servicio web".
Consulte también
Directrices para resolver problemas de permisos de IISDirectrices para resolver problemas de permisos de servicios web