Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
SQL Verbidung geht manchmal verloren
f.ritz
myCSharp.de - Member

Avatar #avatar-2331.jpg


Dabei seit:
Beiträge: 341
Herkunft: Sibirien

Themenstarter:

SQL Verbidung geht manchmal verloren

beantworten | zitieren | melden

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?
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von f.ritz am .
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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
myCSharp.de - Member

Avatar #avatar-2331.jpg


Dabei seit:
Beiträge: 341
Herkunft: Sibirien

Themenstarter:

beantworten | zitieren | melden

Danke!
Kann mir noch jemand einen Tip geben - wie ich das Verhalten nachbilden könnte, denn bei mir kommt der Fehler nicht!?!?
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

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.
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 9.999

beantworten | zitieren | melden

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?

...
private Nachricht | Beiträge des Benutzers
Gelöschter Benutzer

beantworten | zitieren | melden

Zitat von FZelle
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.