Problemas con un WS y tratamiento de excepciones

02/12/2004 - 18:00 por Tako | Informe spam
Hola grupo

Tengo un problemilla que me está haciendo pensar muy seriamente en el
retiro de la informática, no se si es un error mío, del SPS, de los
Webservices o un bug del Framework, pero como en el fondo está el SPS lo
mando aquí de momento a ver si entre sufridos programadores del SPS
encontramos una solución.

Explico la situación:

Cliente (C) que llama a un Webservice (WS)
WS que llama a una dll (DLL)
DLL que hace trabajos contra el SPS, uno de estos trabajos es crear
un sitio nuevo

El problema se da cuando el usuario no tiene permisos para crear un
sitio, entonces debería de suceder

La DLL casca por que no tiene permisos, la DLL captura la excepción,
deja constancia en un fichero de logs y la relanza.
El WS captura esa excepción relanzada y devuelve el string "error"
El cliente recibe la cadena "error" y hace lo que deba de hacer.

El problema es que el cliente en lugar de recibir la cadena recibe un
error 401 de acceso no autorizado a la página en lugar de "error", el
problema es que el WS SI que trata bien la excepción y devuelve "error".

He estado mirando el código depurándolo y a base de logs y sucede esto:

try
llamada a la dll
catch ex as exception
aquí entra
finally
aquí también
end try

aquí ya no llega


Vamos, que parece que no llega a salir nunca del try.

La verdad es que no le veo sentido.

A ver si alguien me puede echar una mano.

Graciassss

Preguntas similare

Leer las respuestas

#6 Tako
09/12/2004 - 09:41 | Informe spam
Ala, problema resuelto, resulta que es cosa de la propiedad
"CatchAccessDeniedException" de la clase "SPSite", resulta que si la pones a
"false" las cosas van como deben de ir, sin embargo si se deja como está por
defecto a la hora de problemas con los permisos el SPS hace cosas muy
raras... en fin, tres días tirados a la basura por "observaciones volantes
no identificadas" del SPS2003

Tako wrote:
Gustavo wrote:
Hmmmm... no me sorprende. Alguna vez me paso algo parecido, con uno
de esos bugs de elefante que ni siquiera Microsoft nos pudo
solucionar, y lo que hice fue ponerle un redirector a la pagina de
error. Brillante, como de costumbre, pero mas feo que ver morir a la
mama de hambre. Otra idea es que antes de que el compilador entre en
el finally (en el catch mismo, me refiero) le metas tu propio
redirector a una pagina o funcion tuya... es otra idea...
Saludos,
Gustavo



Bueno, estoy a la caza de esto y después de preguntar en los
grupos ingleses (con mi maravilloso ingles:) me han dado a la pista
hacia "CatchAccessDeniedException", he mirado por Google y he
encontrado esto otro:
http://blogs.msdn.com/ryanrogers/ar...07/15.aspx

así que parece que tiene buena pinta. De todas formas, para bien
de mi salud mental, estoy de puente hasta el jueves, cuando lo pruebe
ya comentare si ha ido bien, si ha ido mal podréis escuchar mis
lamentos por toda la península.


PS: A las deidades las fusilamos a todas en la ultima revolucion, y
desde entonces no tenemos mas de eso por aqui. Y te doy permiso de
tutearme, pero no abuses... 8->



Uy, visto lo visto voy a tener que dejar de relucir y de salir
disfrado de cisne de parranda no sea que intuyas mi naturaleza ]:)
jajajaja



"Tako" wrote:

Tako wrote:
"Gustavo" wrote in message
news:



Recuerda que SPS cuando comete un error muchas veces no devuelve
directamente una exception, sino que te manda a una pagina
error.aspx, que es
lo que puede estar pasando aqui (directamente desde el finally
hacia el error.aspx con una redireccion, de tal forma que nunca
vas mas alla en el codigo).





He estado mirando a base de snniffer y efectivamente parece que
se hace un redirect a una página de error, francamente me está
tocando la moral el asunto este, usease:

La DLL genera un error de seguridad
El WS trata ese error

Pero el SPS cuando el WS acaba de tratar ese error en lugar de
seguir con el código parece que automáticamente hace un redirect a
otra página ajena al WS y da un pete de conexión.

Los WebService tienen una propiedad que se llama
AllowAutoRedirect pero parece que no es efectivo para esto por que
solo sirve para los errores 300...

¿alguien sabe como solucionar este comportamiento?¿es un bug?¿es
un feacture?¿está el mundo contra mi?

Si alguien tiene alguna sugerencia lo agradeceré enormemente


Si, algo de ese estilo había pensado, pero no encuentro sentido
a algunas cosas: ¿por que el código siguiente al try no se
ejecuta?¿por que si estoy accediendo vía el modelo de objetos al
SPS me tiene que redireccionar a ninguna lado?

Es decir: ahora parece que: la DLL peta, el WS captura la
excepción pero una vez se acaba el bloque del try en lugar de
seguir ejecutando el código el propio WS hace un redirect a una
página de error 401.

Es que no tiene sentido ¿cómo es posible que el SPS corte la
ejecución de código por que le de la real gana?¿y por que esa
redirección justo al salir del try?

De todas formas se me ha ocurrido una cosa: mañana pongo el WS
en sitio nuevo del IIS que no tenga nada que ver con el SPS, a ver
que demonios sucede pero aquí no tendría que haber redirecciones
extrañas por parte del SPS por que no esta ejecutandose en él...

Ya contare mañana, muchas gracias por la ayuda

Es una idea...
Saludos,
Gustavo


"Tako" wrote:


Hola grupo

Tengo un problemilla que me está haciendo pensar muy
seriamente en el retiro de la informática, no se si es un error
mío, del SPS, de los Webservices o un bug del Framework, pero
como en el fondo está el SPS lo mando aquí de momento a ver si
entre sufridos programadores del SPS encontramos una solución.

Explico la situación:

Cliente (C) que llama a un Webservice (WS)
WS que llama a una dll (DLL)
DLL que hace trabajos contra el SPS, uno de estos
trabajos es crear
un sitio nuevo

El problema se da cuando el usuario no tiene permisos para
crear un sitio, entonces debería de suceder

La DLL casca por que no tiene permisos, la DLL captura la
excepción, deja constancia en un fichero de logs y la relanza.
El WS captura esa excepción relanzada y devuelve el string
"error" El cliente recibe la cadena "error" y hace lo que
deba de hacer.

El problema es que el cliente en lugar de recibir la cadena
recibe un error 401 de acceso no autorizado a la página en lugar
de "error", el problema es que el WS SI que trata bien la
excepción y devuelve "error".

He estado mirando el código depurándolo y a base de logs y
sucede esto:

try
llamada a la dll
catch ex as exception
aquí entra
finally
aquí también
end try

aquí ya no llega


Vamos, que parece que no llega a salir nunca del try.

La verdad es que no le veo sentido.

A ver si alguien me puede echar una mano.

Graciassss
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida