Voici mon problème. J'ai un service web de middleware utilisé par plusieurs clients web. Le service Web est un service d'encapsulation qui appelle les services Web de plusieurs fournisseurs. L'appel au service Web du fournisseur est enveloppé dans une TryCatch, mais les exceptions générées ne sont pas interceptées par mon service Web, elles sont interceptées dans les applications client.Essayez Attraper - pas attraper
Ai-je raté quelque chose? Est-ce lié à ce posting?
Voici un extrait de code simplifié:
Dim VendorWebservice as New VendorWebservice
Dim VendorResponse As VendorResponse = Nothing
Dim ClientResponse as New CustomClientResponse
Try
VendorResponse = VendorWebservice.VendorWebMethod
Catch ex As Exception
ClientResponse.ErrorMessage = ex.Message
ClientResponse.Status = "VendorError"
Return ClientResponse
End Try
EDIT
Pour élargir certains détails ... Le code est exécuté avec succès 99% du temps. À l'occasion rare qu'il y a un problème avec le site Web du fournisseur est lorsque ce problème se produit. J'ai eu VS ouvert à la fois pour l'un des clients Web et le service Web et peut passer par le code du client vers le WS et retour. Quand je peux reproduire le problème, j'ai passé le code client à l'endroit où il appelle notre service Web, puis je passe au code WS et j'exécute jusqu'à ce qu'il appelle le code du fournisseur et à ce moment, il retourne au code client, sans frapper le bloc Catch ou tout autre code après.
Espérons que ça aide.
EDIT
Certaines des réponses affichées ont fourni des avenues à la recherche, la plupart notibly qu'il ya des exceptions qui peuvent être créées qui ne sont pas dérivés de System.Exception. (Qui le savait?) Mais j'ai également découvert qu'à partir de .NET 2.0 et plus tard, ces exceptions non-System.Exception sont enveloppées par .NET dans une exception System.Exception. Donc, en théorie, cela devrait exclure les non-System.Exceptions. En outre, d'après mes lectures, lorsque j'appelle un service Web (comme mon service Web le fait), en théorie, seuls deux types d'exceptions devraient être réellement visibles, System.Net.WebException et System.Web.Services.Protocols.SoapException. , les deux dérivent de System.Exception. Je ne sais pas si c'est vraiment vrai s'il n'y a que 2 types d'exceptions possibles lors de l'appel d'un service web, mais je vais le jeter là. :)
Toujours à la recherche d'une réponse ...
EDIT
Reproduire la condition d'erreur est avérée être difficile à atteindre. Chaque scénario que j'ai lancé sur le code a répondu comme prévu, l'erreur étant interceptée dans le bloc Catch. Alors qu'en théorie .NET est supposé encapsuler des exceptions qui ne dérivent pas de System.Exception, la seule réponse logique semble être en accord avec la réponse de Joe que l'exception que nous avons expérimentée NE dérive PAS de System.Exception et est donc traitée comme non gérée. exception.
collez l'erreur ici, avec stacktrace et tous – Fredou
Il est difficile à reproduire, car il est causé par un problème du côté du fournisseur de l'appel, mais je vais voir ce que je peux faire. – Walter
L'un des composants: CustomClientResponse, VendorResponse ou VendorWebservice supprime l'exception et ne la réenregistre pas, ou la stocke et ne la réenvoie pas. Sans le code source de ces composants ou sans liens vers la documentation de l'API, nous ne pouvons probablement pas vous aider. –