Compartir a través de


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

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

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

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