2008-12-04 13 views
0

J'ai actuellement un service Web SOAP .net avec un délai d'attente sur la demande que je définie à l'aideComment réparer un délai d'attente .NET Webservice provoquant une exception UnsupportedMediaException dans un client Java?

Server.ScriptTimeout = TIME_OUT; 

J'ai alors appel java client dit service Web. Toutefois, lorsque le délai d'attente est atteint, je reçois cette exception:

Exception in thread "Thread-9" com.sun.xml.ws.server.UnsupportedMediaException: Unsupported Content-Type: text/html; charset=utf-8 Supported ones are: [text/xml] 

Ce qui se passe est que le service Web renvoie une page d'erreur html avec le code de délai d'attente http (503 je crois?), Que mon code Java (généré à l'aide WSDLimport) n'attend pas.

Maintenant, je pourrais attraper l'erreur UnsupportedMediaException sur le client et essayer de le traduire en quelque chose de plus significatif, mais je préférerais envoyer une exception de délai d'attente plus spécifique du côté du service Web. Y at-il de toute façon dans un service web .net d'envoyer une meilleure exception quand un timeout se produit, ou de toute autre manière pour gérer cette situation mieux?

EDIT:
Je me sers du WSDLImport de la distribution GlassFish 2.

Répondre

1

Ceci est un known issue avec la pile JAX-WS de Sun. Pour référence, le code HTTP 500 signifie en réalité que le serveur avait une erreur de serveur interne. Je ne sais pas pourquoi .NET envoie cela plutôt que le service HTTP 503 non disponible.

+0

Je ne suis pas vraiment sûr du code d'erreur qu'il envoie, j'ai juste deviné. C'est probablement un 503. Merci pour l'info. J'ai utilisé Glassfish pour l'importation WSDL, mais l'utilisation de quelque chose comme Apache Axis résoudre mon problème? –

+0

Les chances sont en utilisant Axis permettrait de contourner cela, oui. Ou cela pourrait ajouter de nouvelles complexités ... Je n'ai pas utilisé Axis depuis un moment, donc je ne pouvais pas le dire. – Powerlord

0

Vous pouvez créer votre service Web asynchronous. Ensuite, démarrez une minuterie avec votre délai d'expiration dans BeginMyMethod et lancez une exception personnalisée dans votre méthode EndMyMethod. Il sera enveloppé dans l'exception SOAP et envoyé au client en tant que tel.

+0

Impossible de conserver une minuterie dans un service Web synchrone? Il semble étrange qu'il n'y ait pas de meilleure façon intégrée de le faire. J'ai juste supposé que je faisais quelque chose de mal. –

+0

Vous pouvez, mais c'est mauvais quand vous avez des opérations de longue durée. Chaque requête web occulte un thread du pool de threads. Si vous ne le faites pas asynchrone (pour les opérations longues), ce thread est occupé jusqu'à ce que la demande soit terminée. –

Questions connexes