2009-10-16 4 views
1

Arrière-plan: J'appelle un service Web écrit en ASP.NET qui interroge une base de données Oracle. Je sais que le service Web fonctionne, car je l'ai utilisé avant d'autres applications. J'ai donc une application Web dans Visual Studio que j'ai basculée d'un service Web 'DEV' vers une version configurée en production du même service Web pour les tests. Signalant au service Web DEV 'configuré est pas de problème, mais d'appeler la version de production, je reçois toujours une exception appelant le service:Que signifie l'erreur ORA-12571 (TNS: échec de l'écriture de paquet) dans un service Web?

SoapException was unhandled by user code 
Server was unable to process request. ---> could not execute query 
[ SELECT this_.FIELD1 as FIELD1_18_0_, this_.FIELD2 as FIELD12_18_0_ FROM ABC.TABLE_A this_ WHERE this_.FIELD1 like :p0 ORDER BY this_.FIELD1 asc ] 
Positional parameters: #0>00073% 
[SQL: SELECT this_.FIELD1 as FIELD1_18_0_, this_.FIELD2 as FIELD12_18_0_ FROM ABC.TABLE_A this_ WHERE this_.FIELD1 like :p0 ORDER BY this_.FIELD1] ---> ORA-12571: TNS:packet writer failure 

J'ai couru les requêtes SQL sur la base de données appropriée (coupé et collé directement sur le message d'exception) et la requête est revenue avec les données attendues. J'ai essayé de mettre à jour et de réajouter la référence de service Web à la fois en tant que "référence de service" (.NET 3.0+) et en tant que "référence Web" (ancien chemin .NET), et les deux donnent la même erreur.

Question: Alors, que signifie une erreur "ORA-12571: TNS: échec de l'écriture de paquet" dans le contexte d'un service Web? La recherche du numéro d'erreur Oracle donne des causes possibles très vagues telles que "connexion par câble lâche" ou "conflit d'adresse IP". Je suis assez certain que ce n'est ni l'un ni l'autre, car une application différente utilise actuellement ce service Web avec succès. Peut-être une sorte d'erreur de configuration, ou peut-être quelque chose de plus subtil? Quelqu'un d'autre a vu ce numéro d'erreur Oracle vexant être attribué à quelque chose lié au service Web?

+0

Lien potentiellement utile: http://www.cryer.co.uk/brian/oracle/ORA12571.htm –

+0

Oui, c'était le premier lien que j'ai trouvé, c'est là que j'ai eu la "connexion par câble lâche" et "IP adresse conflit "réponses de lapin-piste de. –

Répondre

1

Votre appel va du client ws au serveur ws vers la base de données Oracle.

Votre erreur est une erreur ORA générée par la base de données. Donc, votre problème est probablement entre le serveur ws et la base de données.

Lorsque vous avez exécuté "les requêtes SQL par rapport à la base de données appropriée", l'avez-vous fait depuis le serveur Web? Si non, pourriez-vous essayer cela. Assurez-vous que vous utilisez la même configuration de connexion.

EDIT

Selon le commentaire ci-dessous, le vrai problème était un décalage du pilote.

+0

Ceci est le plus proche de la solution actuelle, et m'a fait réfléchir sur le bon chemin. Le vrai problème était que le pilote Oracle sur notre serveur de production n'était qu'un pilote Oracle 8.x, mais que la base de données avec laquelle le service Web essayait de communiquer était une base de données Oracle 9.2. Donc, apparemment, un pilote de discordance de version de base de données peut provoquer l'erreur ORA-12571.Si vous souhaitez modifier votre réponse afin d'inclure la non-concordance des versions du pilote comme cause possible, il peut être utile pour les futurs utilisateurs de rechercher une solution similaire. :-) –

+2

Quelques informations supplémentaires, au cas où quelqu'un d'autre tomberait sur ce problème. Le correctif ci-dessus (mise à jour du pilote Oracle en version 9.2) a aidé sur notre serveur "test", mais n'a pas corrigé le serveur de production. Nous utilisons NHibernate comme solution ORM, et nous avons finalement découvert que le serveur de test et le serveur de production avaient des versions différentes de .NET (.NET 3.5 SP1 vs .NET 3.5 sans SP). Nous avons mis à jour le serveur prod avec .NET 3.5 SP1, et voila, le problème a disparu là aussi. Longue histoire courte: (service Web en utilisant NHibernate), nous devions mettre à jour Oracle à 9.2 et .NET à 3.5 SP1. –

1

Je suggère de réexaminer vos hypothèses plus attentivement, car il s'agit clairement d'une erreur dans le dialogue web-service avec le db et devrait être complètement indépendant de l'appelant w/s. Si l'appel w/s génère cette exception spécifique, il devrait le faire pour toutes les autres invocations, de sorte que votre 'autre application' qui utilise le service Web n'exécute tout simplement pas le même code ou qu'il existe des facteurs externes en jeu.

Dans les deux cas, cela n'a aucun rapport avec la façon dont le service est enregistré ou appelé.

+0

Aha, vous avez raison! Je pensais que mon client avait été configuré de manière incorrecte pour le service Web, mais le vrai problème était que le service Web lui-même ne communiquait pas correctement à Oracle. –