2009-10-19 6 views
0

J'ai une orchestration qui utilise un port de réponse à la demande pour appeler un service Web et attendre une réponse. Cela fonctionne parfaitement.Gestion des exceptions de demande-réponse d'orchestration Biztalk

Je suis en train de faire des tests pour gérer les erreurs et j'appelle un service web qui jette une division par zéro exception. L'orchestration n'attrape pas l'exception en tant qu'exception; il agit comme si la faute SOAP que je récupère est une chaîne normale.

Cependant lorsque j'ai testé ce comportement avec seulement un port de requête, je me suis retrouvé dans le bloc catch de l'orchestration avec l'exception diviser par zéro. J'ai besoin d'attraper l'exception de service Web également dans les ports de réponse à la demande et pas seulement sur le port unidirectionnel.

+0

Utilisez-vous l'adaptateur SOAP ou WCF? –

+0

J'utilise l'adaptateur WCF –

Répondre

1

Ce type d'erreur que vous voyez est parce qu'il ya un problème avec la réponse HTTP provenant du service Web. BizTalk essaie d'analyser la réponse reçue et de la décomposer en en-tête et en corps, puis d'analyser l'en-tête. Si la réponse est HTTP, elle provoque ce type d'erreur. Il utilise le librbary SOAP pour interpréter le message de réponse et il explose parce que le message est mauvais. La division par zéro peut se produire parce qu'elle n'a pas pu obtenir exactement la longueur de la réponse à partir de l'en-tête et a ensuite scrogué quelques calculs.

Je voudrais placer un renifleur de paquets sur la ligne (comme NetMon) et voir ce qui est réellement envoyé à BizTalk. Si ce n'est pas conforme à HTTP (parcourir les spécifications ou trouver un bon HTTP pour les nuls), BizTalk peut réagir de façon imprévisible.

Bonne chance.

1

Vous devez d'abord jouer selon les règles!

Pour attraper une exception dans votre bloc de champ dans Biztalk lors de l'utilisation d'un port de demande-réponse, vous pourriez avoir à faire ce qui suit ...

  1. Définissez la nouvelle tentative de comptage à 0 sur votre physique port de requête-réponse que vous utilisez pour lier.
  2. Activez la notification de remise de l'indicateur sur "Transmis" sur votre port de requête-réponse logique au sein de l'orchestration. Attrapez l'exception "System.Web.Services.Protocols.SoapException" et gérez-la comme s'il vous plaît.

Espérons que cela aide.

Références: Jetez un oeil à mon article dans le projet de code Code Project

+1

Tout a été fait comme vous l'avez écrit sauf un numéro J'utilise un port dynamique et il n'y a pas d'attribut de nombre de tentatives sur le port (ou je ne l'ai pas vu) –

Questions connexes