2016-06-20 7 views
0

Dies ist mein Service-Start-Code und meine Klasse. es ist lang, aber das Problem ist nur mit Datenbank und EntityFrameWork Abschnitt bitte andere Zeilen weglassen. nur Daten aus der Datenbank lesen wollen halte ich:Verwendung von EntityFrameWork in Windows-Dienstanwendung gibt den zugrunde liegenden Providor Fehler beim Öffnen Fehler

meinen Dienst Startcode:

protected override void OnStart(string[] args) 
    { 
     System.Threading.Thread newThread = new System.Threading.Thread(new System.Threading.ThreadStart(ReadPolling.Read)); 
     newThread.Start(); 
    } 

das ist mein ReadPolling.cs Datei:

public class ReadPolling 
{ 
    public static webtccUsersEntities db; 
    public static void Read() 
    { 
     try 
     { 
      byte[] readBuffer = new byte[1024]; 
      while (true) 
      { 
        writeToDb(readBuffer); 
        System.IO.File.WriteAllText("D:\\1.txt", "read-write"); 
      } 

     } 
     catch (Exception ex) 
     { 
      System.IO.File.WriteAllText("D:\\1.txt", ex.Message); 
     } 

    } 
    public static void writeToDb(byte[] userId) 
    { 
     db = new webtccUsersEntities(); 
     string _userId="";foreach(byte item in userId) 
     { 
      if(item!=0 || item!=40) 
      _userId += (39 - item).ToString(); 
     } 
     _userId = "0009544023"; 
     Time time; 
     if(db.Times.Where(i=>i.userId==_userId).Count()>0)//User has at least one time 
     { 
      time = db.Times.Where(i => i.userId == _userId).OrderBy(i => i.dayDate).OrderBy(i=>i.inTime).Last();//last time 

      if (time.dayDate == DateTime.Today)//today time 
      { 
       if(time.outTime==null)//wants an out for today 
       { 
        time.outTime = DateTime.Now.ToLocalTime();//an out for today 
        db.SaveChanges(); 
       } 
       else//wants a new in/out for today 
       { 
        Time newTime = new Time();newTime = db.Times.Create(); newTime.userId = _userId; newTime.dayDate = DateTime.Now.Date; newTime.inTime = DateTime.Now.ToLocalTime(); 
        db.Times.Add(newTime);db.SaveChanges(); 
       } 
      } 
      else//not today time 
      { 
       //new in for today 
       Time newTime = new Time();newTime = db.Times.Create();newTime.dayDate = DateTime.Today;newTime.inTime = DateTime.Now.ToLocalTime();newTime.userId = _userId; 
       db.Times.Add(newTime);db.SaveChanges(); 
      } 

     } 
     else//user first time 
     { 
      Time firstTime = new Time(); 
      firstTime = db.Times.Create(); 
      firstTime.userId = _userId;firstTime.dayDate = DateTime.Now.Date;firstTime.inTime = DateTime.Now.ToLocalTime(); 
      db.Times.Add(firstTime);db.SaveChanges(); 
     } 


    } 
} 

wie man sehen kann, wenn ein Fehler auftritt Ich schreibe es in eine Datei namens "1.txt" in meinem Laufwerk "D: \". Wenn ich den Dienst starte, öffne ich meine Textdatei und sehe den Fehler "Der zugrunde liegende Provider ist bei Open.Login fehlgeschlagen für den Benutzer 'NT AUTHORITY \ LOCAL SERVICE' fehlgeschlagen.". Was verursacht das Problem?

+0

Gibt es eine innere Ausnahme? – bolt19

+0

@ bolt19 ja, ich habe hinzugefügt –

+0

@NeerPriv nein. Es ist Windows-Dienst, der in meinem Computer läuft: | –

Antwort

1

Sie sollten die innere Ausnahme und melden Sie sich als es den tatsächlichen Verbindungsfehler zeigt, die als eine ungültige oder fehlende Verbindungszeichenfolge in der .config-Datei könnten so einfach sein ...

+0

aktualisierte Frage. –

+0

obwohl Ihre Antwort nicht beantwortet, aber es half mir, das Problem zu lösen. Lösche deine Antwort und schreibe sie als Kommentar. Vielen Dank –

Verwandte Themen