WebService C# avec connexion SQL Server

Signaler
Messages postés
8
Date d'inscription
vendredi 6 février 2004
Statut
Membre
Dernière intervention
7 septembre 2007
-
Messages postés
4
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
10 mai 2010
-
Bonjour,



J'ai un problème lorsque je demande à un WebService d'accéder à une BD
SQL Server : la connexion marche, mais, la connexion ne se ferme jamais
sauf si je recompile le WebService ou que je tue la process oracle
directement dans 'Activity Monitor du Management Studio'.



En dev : Studio 2005, C#, SQL Server 2005, SQL Server Management Studio Express (Activity Monitor)

WebService : Sous Visual Studio 2005, C# (le WebService est sur un serveur)

Appli Cliente : Sous Visual Studio 2005, C# (sur un poste client relié au serveur via un VPN)

Mon niveau : débutant



Mon WebService :

using System;

using System.Collections;

using System.Web;

using System.Web.Services;

using System.Web.Services.Protocols;

using System.Data;

using System.Data.Sql;

using System.Data.SqlClient;



[WebService(Description= "TEST",Namespace = "http://tempuri.org/")]

[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]

public class TEST_WS : System.Web.Services.WebService

{

public TEST_WS()

{

}

[WebMethod]

public void Initialisation()

{

SqlConnection oMaConnexionBD =null;

SqlDataReader oReader=null;



string sID_Ress="";

string sSQL="";



oMaConnexionBD = new SqlConnection();

oMaConnexionBD.ConnectionString = "Data Source=.........";



oMaConnexionBD.Open();

oMaConnexionBD.Close();

oMaConnexionBD = null;

}

}



Mon Appli Cliente :

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;



namespace WindowsApplication3

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}



private void button1_Click(object sender, EventArgs e)

{

WebReference.TEST_WS MonWS = new WebReference.TEST_WS();

MonWS.Initialisation();

MonWS.Dispose();

MonWS = null;



}

}

}



Donc comme je l'ai expliqué, la connexion avec la BD se fait mais elle
n'est jamais libérée !! même lorsque je quitte l'appli cliente !



Quelqu'un peut-il m'aider SVP ?

Merci.

6 réponses

Messages postés
8
Date d'inscription
vendredi 6 février 2004
Statut
Membre
Dernière intervention
7 septembre 2007

il s'agit bien de SQL Server et non pas d'Oracle comme je l'ai mis ! (faute de frappe)
Messages postés
8
Date d'inscription
vendredi 6 février 2004
Statut
Membre
Dernière intervention
7 septembre 2007

pou info, le process (visible dans 'SQL Server Activity Monitor') est :

- Status : sleeping

- Command : AWAITING COMMAND

- Application : .Net SqlClient Data Provider

- Open Transactions : 0

- CPU : 0

- Physical IO : 0

- Memory Usage : 2
Messages postés
8
Date d'inscription
vendredi 6 février 2004
Statut
Membre
Dernière intervention
7 septembre 2007

Bon, puisque personne ne veut me répondre, je me réponds tout seul (si ça peut aider d'autres personnes):

En fait, il suffit d'utiliser un pool de connexion :



MaConnexionBD.ConnectionString = "Data Source=.........;pooling=false;";
Messages postés
1
Date d'inscription
lundi 19 juin 2006
Statut
Membre
Dernière intervention
13 juillet 2006

Au fait "pooling = false" n'est pas une solution très propore. Si tu regarde le coté SQL Server, il va créer une SP chaque fois quand le webservice est appelé, même si c'est avec le même utilisateur. En mettant pooling = false désactive le limite sur le nombre max de SP. Du coup tu trouvera facilement 1000 SP sleeping sur un service de production.

Donc gardez pooling = true, avec le même sqlConnection normalement il doit pas créer des nouveaux SP. L'importance c'est de créer un seul SqlConnection dans ton programme. Au lieu de créer le SqlConnection dans le webméthode, tu peux le déclarer et définir son ConnectionString dans InitializeComponent() de webservice.

En conclus, un SP pour chaque SqlConnection. Pour éviter dépasser le max de pooling SP, il faut utiliser toujours le même objet SqlConnection (non seulement le même SqlConnection.ConnectionString)
Messages postés
1
Date d'inscription
mardi 29 avril 2003
Statut
Membre
Dernière intervention
5 septembre 2006

Merci pour le tuyau (pooling)

Quelqu'un a-t-il une classe d'accès à SQLServer 2005 permettant de ne travailler qu'avec une seule SQLConnection?
J'ai fait le tour ici, et toutes créent un objet à chaque requête :(

Merci de faire signe ;)
Messages postés
4
Date d'inscription
dimanche 31 décembre 2000
Statut
Membre
Dernière intervention
10 mai 2010

je travaille par asp.net et j'aimerai savoir la connexion avec base donnée est ce que ce fait avec le web service puis la couche présentation communique avec le web service si oui comment ?

dans J2EE on parle de MVC1 et MVC2 et pour .net on parle de quoi ?

merci d'avance pour vous réponse