Pouvez-vous appeler un webservice de TSQL code?
Est-il un moyen pour appeler à partir d'un TSQL procédure stockée ou une fonction à un webservice?
- Convenu qu'il n'est pas quelque chose voulez faire, mais parfois, vous avez à faire des choses que vous n'avez pas l'idéal pour le faire. Dans ce cas, j'ai fini par ré-écriture du web fonction de service comme une fonction sql pour accomplir la même tâche. Merci pour tous les liens et suggestions.
Vous devez vous connecter pour publier un commentaire.
Oui , vous pouvez créer comme ceci
Sûr que vous peut, mais c'est une idée terrible.
Web-les appels de service peut prendre arbitraire quantités de temps, et ne pas aléatoire, en fonction du nombre de jeux de counterstrike sont en cours de lecture sur votre réseau, vous ne pouvez pas dire combien de temps cela va prendre.
Au minimum que vous êtes en train de regarder probablement une demi-seconde, le temps qu'elle génère le XML, il envoie la requête HTTP vers le serveur distant, puis parser le XML et envoyer une réponse.
Selon l'application qui fait la
INSERT INTO BLAH
requête qui a causé le web-le service d'incendie va avoir à attendre qu'elle se termine. Sauf si c'est quelque chose qui arrive seulement dans le fond comme un quotidien de la tâche planifiée, les performances de votre application va de la bombeLe service web-invoquant le code s'exécute à l'intérieur de SQL server, et utilise ses ressources. Car il va prendre beaucoup de temps à attendre pour que la requête HTTP, vous finirez par utiliser beaucoup de ressources, qui sera de nouveau mal les performances de votre serveur.
Pas dans le code T-SQL lui-même, mais avec SQL Server 2005 et au-dessus, ils ont permis à la possibilité d'écrire des procédures stockées CLR, qui sont essentiellement des fonctions .NET code et de les exposer comme des procédures stockées pour la consommation. Vous avez le plus de la .NET framework à votre portée pour cela, afin que je puisse voir la consommation d'un service web possible par le biais de ce.
C'est un peu long de discuter ici en détail, mais voici un lien vers un Article MSDN sur le sujet.
Je ne voudrais pas le faire pour le trafic lourd ou essentielles à la mission de choses, CEPENDANT, si vous n'avez PAS besoin de recevoir de la rétroaction à partir d'un service, alors c'est effectivement une excellente chose à faire.
Voici un exemple de ce que j'ai fait.
Ne pas faire de vieux XML
JSON
Exemple complet:
Exec sp_OADestroy @Object
comme dans @kiran.Backwad l 'exemple de lasp_OA*
appelsDans les versions antérieures de Sql, vous pouvez utiliser une proc stockée étendue ou xp_cmdshell à débourser et appeler un webservice.
Pas que ce soit de ces sons comme un décent, de l'architecture, mais parfois vous avez à faire des trucs dingues.
Vous pouvez le faire avec l'embedded visual basic objets.
Tout d'abord vous créer un VB objet de type " MSXML2.XMLHttp", et de vous utiliser cet objet pour toutes vos questions (si vous le recréer à chaque fois s'attendre à une lourde amende de la performance).
Alors vous nourrir que de l'objet, certains paramètres, dans une procédure stockée qui invoque sp_OAMethod sur l'objet.
Désolé pour le inprecise exemple, mais une rapide recherche sur google devrait dévoiler comment le vb-script méthode est faite.
--
Mais le CLR version est beaucoup....BEAUCOUP plus facile.
Le problème avec l'invocation des services web, c'est qu'ils ne peuvent pas suivre le rythme avec le moteur de base de données. Vous aurez beaucoup d'erreurs où il juste ne peut pas tenir.
Et rappelez-vous, les SERVICES web nécessitent une connexion à chaque fois. La multiplicité entre en jeu. Vous ne voulez pas ouvrir 5000 connexions de socket de service d'un appel de fonction sur une table. C'est looney!
Dans ce cas, vous devez créer un personnalisé fonction d'agrégation, et de l'utiliser comme un argument à passer à votre webservice, qui permettrait le retour d'un jeu de résultats...alors que vous auriez à rassembler que. C'est vraiment une façon maladroite de l'obtention des données.
Si vous travaillez avec sql 2000 niveaux de compatibilité et ne peut pas faire de l'intégration du clr, voir http://www.vishalseth.com/post/2009/12/22/Call-a-webservice-from-TSQL-(Stored-Procedure)-using-MSXML.aspx
J'ai travaillé pour de grands/global des entreprises du monde entier, à l'aide de bases de données Oracle. Nous sommes à la consommation de services web tous les temps thru DB avec les procédures de la banque et pas de problèmes, même ceux avec un trafic lourd. Tous pour un usage interne, je veux dire sans accès à internet, uniquement à l'intérieur de la plante. Je vous recommande d'utiliser, mais tout en étant très prudent sur la façon dont vous le concevez