2009-04-08 5 views
0

Si j'ai un service Web .asmx qui n'expose qu'un seul appel. Celui qui prend quelques paramètres et insère ces valeurs en tant qu'enregistrement dans la table SQL Server 2005. Quelle devrait être cette méthode pour être aussi "aimable" que possible dans le pool de connexions ADO.NET? À quoi devrait-il ressembler si on l'appelait peut-être 10 fois par seconde (étalé) sur plusieurs clients. D'autres paramètres que je devrais modifier?Services Web, pool de connexions ADO.NET, erreur de délai d'attente

Actuellement Je reçois l'erreur:

System.Web.Services.Protocols.SoapException:
Server was unable to process request --> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to the operation or the server is not responding.

Est-ce que l'erreur est-elle différente si le pool de connexion est le problème? Comment puis-je savoir s'il s'agit d'un problème de pool de connexion, d'une limitation SOAP ou si ma base de données est tellement occupée que les appels arrivent à expiration?

Répondre

1

Vous ne publiez pas certaines des informations les plus importantes sur ce que vous faites. Le fait qu'il s'agisse d'une webméthode est un délit de foire, il s'agit simplement d'un problème de base de données et de la façon dont vous le martelez.

Il semblerait que vous puissiez avoir un problème de connectivité ici, comme les états d'exception (et je ne crois pas que cela a quelque chose à voir avec le pool). Obtenez-vous ceci en essayant d'ouvrir la connexion, ou en essayant d'exécuter l'opération? Chacun a un délai d'attente séparé, il peut donc être judicieux d'ouvrir explicitement la connexion, puis de passer l'appel à l'opération, afin que vous puissiez voir où se trouve le délai d'attente.

En outre, je regarderais pour voir si vous employez des transactions. Si cela est inclus dans une connexion et que le délai est sur l'opération et que vous utilisez des transactions, utilisez-vous des transactions pour accéder à cette table n'importe où ailleurs (en lecture ou en écriture) enveloppée dans une transaction? Ce pourrait être une impasse à ce moment-là. Si ce n'est pas le cas, alors c'est un problème de connectivité et vous devez vérifier si la machine et le serveur sont correctement configurés (utilisez-vous tcp ip, pipes nommées ou mémoire partagée, par exemple)? exemple) pour les opérations de base de données.

+0

+1. Merci d'avoir exclu le service Web. J'utilise TCP/IP et aucune transaction. Il peut y avoir une forte activité sur cette machine à partir de paquets SSIS qui mettent en scène des données avant les activités de construction de cubes sur une autre machine. Ce truc est un peu hors de mes mains car je ne suis pas sur les équipes BI ou DBA. – BuddyJoe

+0

Je devrais être plus profond dans ce code la semaine prochaine. Je devrais être capable de désinfecter une méthode ou deux et de poster comme exemple. Il y a quelques trucs exclusifs répandus dans le Web Service. – BuddyJoe