J'ai une application de service Web native (ISAPI) que j'ai créée avec Delphi 2010. Pour le moment, elle n'expose que deux méthodes. Le premier, EchoString, est conçu pour me faire savoir que le service Web fonctionne correctement et ajoute quelques caractères à la chaîne que je lui envoie de mon client de service Web Delphi. Cela fonctionne toujours bien.Comment configurer IIS 7 pour autoriser une connexion à une base de données distante à partir d'un serveur Web ISAPI?
La deuxième méthode exposée est celle qui m'intéresse vraiment. Je passe cette méthode une chaîne qui contient le contenu XML d'un ClientDataset. Du côté serveur, mon code prend ce XML et l'insère dans un ClientDataset, après quoi il publie ces données dans une base de données côté serveur. J'utilise des composants IBExpress (IBDatabase, IBTransaction, IBQuery, etc.) pour me connecter à une base de données InterBase côté serveur.
Le problème est que dès que je tente de connecter le composant IBDatabase à sa base de données, la méthode Web échoue. Je pense que j'ai exclu toutes les autres sources pour cette erreur. Je peux créer et remplir le ClientDataset avec un XML ClientDataSet plutôt volumineux envoyé depuis le client qui inclut des jeux de données imbriqués sans problème (j'utilise l'unité MidasLib, donc le ClientDataSet n'essaye pas de charger une DLL). Je peux créer et configurer, à court de connexion, l'IBDatabase et ses divers composants. Encore une fois, sans problèmes. Dès que j'ai défini la propriété Connected du composant IBDatabase sur True à partir du service Web, il échoue. Je lance IIS 7.5 sous Windows 7 64 bits Ultimate (sur ma machine de développement). J'ai essayé d'accorder des droits de contrôle complets à tout le monde (ainsi que spécifiquement à IIS_IUSRS) à la DLL ISAPI spécifique, ainsi qu'au répertoire entier dans lequel le service Web réside. Cela n'a pas résolu le problème. Je suppose qu'il s'agit d'un problème de privilèges avec IIS 7. Que puis-je faire pour permettre à mon service Web ISAPI de se connecter à l'API client InterBase afin de pouvoir utiliser le service Web pour écrire sur mon serveur de base de données? Post-scriptum: Il semble que la connexion à Interbase à partir du service Web n'est pas le problème. Je suis toujours à la recherche de la cause exacte, mais j'ai maintenant réussi à me connecter à Interbase à partir du service Web. Je mettrai à jour ce post une fois que je connaîtrai la cause, mais cette question n'est plus valide. '' '' ''
Je marque la réponse de Bob comme la bonne. La chaîne de connexion était erronée. En fait (et c'est embarrassant, mais je préfère être embarrassé que trompeur), j'ai été mordu par une clause avec. J'ai stocké mes informations de connexion dans les chaînes de ressources. J'ai fait la cession dans une clause avec. Le nom de la chaîne de ressources pour la propriété DatabaseName était DatabaseName. La clause avec a provoqué l'assignation de la propriété DatabaseName à elle-même, au lieu de la valeur dans la chaîne de ressource. J'ai corrigé le problème en préfacant la chaîne de ressource DatabaseName avec le nom de l'unité (ie, DatabaseName: = IBModUnit.DatabaseName;).
En supposant que IIS et Interbase s'exécutent en tant que services, s'exécutent-ils tous les deux sous le même compte? L'exécution d'Interbase en tant que service est un facteur important, mais simplement parce que si elle n'est pas exécutée en tant que service, elle ne sera certainement pas exécutée sous le même compte que IIS. –
Dans ce cas, IIS et InterBase sont des services. Je pense que le problème est qu'un problème de configuration dans IIS empêche mon service Web d'appeler l'API Interbase installée sur l'ordinateur sur lequel le service Web est en cours d'exécution. C'est bizarre, étant donné que je peux écrire sur le système de fichiers local à partir de mon service Web. –