Ich habe einen einfachen .Net Webdienst erstellt, der eine sehr einfache Abfrage ausführt (die normalerweise sehr schnell sein sollte). Die Abfrage lautet etwa so:.Net 2.0 & SQL Server 2008 Hängender Prozess
SELECT v.email
FROM dbo.Reporting r
INNER JOIN dbo.Reporting_EmailList el ON r.reportID = el.reportID
INNER JOIN OtherDB.dbo.V_ActiveDir v ON el.userGUID = v.objectGUID
WHERE r.reportID = @reportID
V_ActiveDir ist eine Ansicht für Active Directory-Daten. Diese Abfrage erhält im Wesentlichen eine Liste von E-Mail-Adressen, an die der Bericht per E-Mail gesendet werden soll. Meine Berichtstabelle enthält derzeit nur 3 Datensätze. Ich habe versucht, Felder zur Berichtstabelle hinzuzufügen, aber es dauerte ewig, und so fand ich heraus, dass diese Abfrage in einem SQL-Prozess hängen blieb. Früher am Tag erzeugte dieses Skript den folgenden Fehler:
Timeout expired. The timeout period elapsed prior to completion
of the operation or the server is not responding.
... was den hängenden Prozess erklärt, denke ich. Wir haben versucht, es zu töten, aber jetzt ist es in einem Rollback-Zustand und ich denke, wir müssen sql Server neu starten (was meiner Meinung nach seltsam ist, dass eine ausgewählte Abfrage versuchen würde, einen Rollback durchzuführen). Gibt es einen Weg mit SQL Server oder .net, um dies erneut zu verhindern? Oder ein Weg, wie ich diesen Prozess in SQL entfernen kann ... ist es möglich, dass etwas im Thread-Pool hängt? Ich kann immer noch aus der Berichtstabelle auswählen, so dass es keine Tabellensperre gibt, nur wenn ich versuche, diese Tabelle zu ändern, dreht sie nur ihre Räder.
Ich habe nicht viel Erfahrung mit IIS, wie ich keinen Zugriff darauf habe, aber wenn es eine Vorschläge gibt, kann ich es weitergeben.
Edit: könnte dies Ursache sein, weil in meiner catch-Anweisung ich nicht überprüfen, ob die SqlConnection offen ist, und ob es geschlossen ist?