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?
Gibt es eine innere Ausnahme? – bolt19
@ bolt19 ja, ich habe hinzugefügt –
@NeerPriv nein. Es ist Windows-Dienst, der in meinem Computer läuft: | –