miércoles, 6 de octubre de 2010

Cachar el error de un webservice en asp.net

Muchas veces cuando se trabaja con webservices en asp.net y existe un error estos regresan algo asi System.Web.Services.Protocols.SoapException: Error al Ejecutar la Consulta , No se puede insertar una fila de clave duplicada en el objeto 'dbo.Personas' con índice único.Talvez en un ambiente de desarrollo esto sea bueno cuando se requiere saber de que webservice viene el error sin embargo es tedioso estar leyendo todo el encabezado que se va formando, la razon de que esto pase es que la excepcion del webservice se va construyendo de un mensaje el nombre del webservice y otros datos. La forma correcta de atrapar el error de un webservice es la siguiente.

Imports System.Web.Services.Protocols
 
Try
Catch ex As SoapException
End Try

He creado una funcion que elimina el encabezado del webservice y que arroja solo el error


 Private Function wmensaje(ByVal ex As SoapException) As String
        Dim men As String = ex.Detail.InnerXml
        Dim i = men.LastIndexOf("</ErrorMessage>") - 15 - men.LastIndexOf("<ErrorMessage>")
        If (ex.Detail.InnerXml.IndexOf("<ErrorMessage>") <> -1 Or ex.Detail.InnerXml IsNot Nothing) Then
            men = men.Substring(ex.Detail.InnerXml.IndexOf("<ErrorMessage>") + 14, i)
        Else
            men = ex.Message
        End If
        Return men
    End Function

'El uso en el catch sería

Try
Catch ex As SoapException
 wmensaje(ex)
End Try

No hay comentarios:

Publicar un comentario