Laden...

SQL Verbidung geht manchmal verloren

Erstellt von f.ritz vor 16 Jahren Letzter Beitrag vor 16 Jahren 4.118 Views
f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 16 Jahren
SQL Verbidung geht manchmal verloren

verwendetes Datenbanksystem: MS SQL Server 2005

Ich mache in meiner Anwendung einen Funktionsaufruf von einem Webservice. Die Funktion des Webservices greift dann auf den SQL-Server zu und fragt Daten, zur Authentifizierung, ab. Es funktioniert aber nicht bei allen Clients Problemlos, einige bekommen einen Laufzeitfehler, es wird automatisch ein Redirect auf die Startseite gemacht und es steht folgendes im Ereignisslog des Webservers:

Exception information:
Exception type: SoapException
Exception message: System.Web.Services.Protocols.SoapException: Die Anforderung konnte vom Server nicht verarbeitet werden. ---> System.Data.SqlClient.SqlException: Fehler auf Übertragungsebene beim Senden der Anforderung an den Server. (provider: TCP-Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
bei System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
bei System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
bei System.Data.SqlClient.TdsParserStateObject.ThrowExceptionAndWarning()
bei System.Data.SqlClient.TdsParserStateObject.WriteSni()
bei System.Data.SqlClient.TdsParserStateObject.WritePacket(Byte flushMode)
bei System.Data.SqlClient.TdsParser.TdsExecuteTransactionManagerRequest(Byte[] buffer, TransactionManagerRequestType request, String transactionName, TransactionManagerIsolationLevel isoLevel, Int32 timeout, SqlInternalTransaction transaction, TdsParserStateObject stateObj)
bei System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransactionYukon(TransactionRequest transactionRequest, String transactionName, IsolationLevel iso, SqlInternalTransaction internalTransaction)
bei System.Data.SqlClient.SqlInternalConnectionTds.ExecuteTransaction(TransactionRequest transactionRequest, String name, IsolationLevel iso, SqlInternalTransaction internalTransaction)
bei System.Data.SqlClient.SqlInternalConnection.BeginSqlTransaction(IsolationLevel iso, String transactionName)
bei System.Data.SqlClient.SqlConnection.BeginTransaction(IsolationLevel iso, String transactionName)
bei System.Data.SqlClient.SqlConnection.BeginTransaction()
bei RedualService.authentificateA(String vendorNo, String plz)
bei RedualService.LogOnAdmin(String vendorNo, String postleitzahl, Boolean& isPortalUserIxist)
--- Ende der internen Ausnahmestapelüberwachung ---

So wie ich es vertehe versucht die Anwendung, mit der gleichen Verbidung zum SQL-Server, Daten abzufragen und die Verbidung wurde iregendwie abgebaut und dann geht es nicht mehr....!?!?!?!

Hier die Funktion des Webservices:

private bool authentificateA(string vendorNo, string plz)
    {
        string SQLCommand;
        bool ret = false;
        SqlConnection sqlConn;
        SqlTransaction trans;
        SqlCommand cmd;
        SqlDataReader reader;


        sqlConn = new SqlConnection(ConfigurationManager.ConnectionStrings["CompleteConnString"].ConnectionString);
        SQLCommand = string.Format(WebConfigurationManager.AppSettings["XXXX"], vendorNo, plz);
        SqlDataAdapter MyCommand = new SqlDataAdapter(SQLCommand, sqlConn);

        sqlConn.Open();
        trans = sqlConn.BeginTransaction();	//hier kracht es!!!!!!!!
        cmd = new SqlCommand();
        cmd.Connection = sqlConn;
        cmd.Transaction = trans;

        cmd.CommandText = SQLCommand;
        reader = cmd.ExecuteReader();
        if (reader.Read())
        {
            //.....
        }

        sqlConn.Close();

        return ret;
    }

Das komische daran ist - entweder geht es bei einem Teil der Clients immer und bei anderen wenigen geht es generell nicht!?!?
Wo liegt das Problem? Wie kann ich es nachbilden? Und wie krieg ich es behoben?

Gelöschter Account
vor 16 Jahren

bau mal eine funktion ein um den connectionpool in regelmässigen abständen zu loggen.

wichtig sind dabei alle informationen zu den physischen connections.

f.ritz Themenstarter:in
341 Beiträge seit 2004
vor 16 Jahren

Danke!
Kann mir noch jemand einen Tip geben - wie ich das Verhalten nachbilden könnte, denn bei mir kommt der Fehler nicht!?!?

Gelöschter Account
vor 16 Jahren

ich kenne ähniche fehler die was mit der anzahl der connections zu tun haben und wiederum andere, die mit der laufzeit (also regelmässig alle z.b. 10 stunden) auftreten. deshalb wäre das verhalten des connectionpools interessant.

F
10.010 Beiträge seit 2004
vor 16 Jahren

Und ich frage mich, wozu die ganzen überflüssigen Objecte da sind.

Benutzt man einen DataReader, ist kein adapter nötig.

Wo ist das try/Finally zum schliessen der connection?

Warum eine Transaction beim lesen?

...

Gelöschter Account
vor 16 Jahren

Und ich frage mich, wozu die ganzen überflüssigen Objecte da sind.

Benutzt man einen DataReader, ist kein adapter nötig.

Wo ist das try/Finally zum schliessen der connection?

Warum eine Transaction beim lesen?

...

ja das ist auch eine gute frage, ist aber nicht der auslöser des fehlers.