Okay, noch keine Antwort, dass heißt mein Post war zu verwirrend bzw. ungenau. Als meine ersten beiden konkreten Fragen:
Soll ich die Datenübertragung selbst über den WCF Service steuern, oder mir nur Informationen über neue Jobs von der Datenbank via WCF Service holen und dann die Übertragung separat initiieren z.B. durch TcpClient, also den WCF Service gänzlich außen vor lassen?
Kann ich im WCF Service Events definieren, damit der Client benachrichtigt werden kann wenn der Server einen neuen Job für ihn erstellt hat, oder ganz einfach gefragt, was wäre hierfür die beste herangehensweise?
Hallo Liebe Community,
um meine Kenntnisse in C# zu vertiefen, habe ich mir ein kleines Beispiel Projekt ausgedacht, welches ich nun in Angriff nehmen möchte. Im Folgenden ganz grob die Anforderungen:
Im ersten Schritt wollte ich mir ein paar Anregungen holen, wie die grundsätzliche Architektur aussehen soll. Es handelt sich hier um eine Client / Server Anwendung. Das Client-Programm meldet sich beim Server an wenn es gestartet wird. Der Server hält eine Liste aller Clients, wobei neue Clients hinzukommen können, und sich alte Clients abmelden können. Mit der Serveranwendung kann man Jobs erstellen, die man dann an einzelne Clients zuweisen kann. Bei diesen Jobs kann es sich z.B. um große Dateien handeln, die einer Auswertung bedürfen oder um das Auswerten von Messdaten. Eine Datei soll also bspw. zerteilt werden und die einzelne Teile an Clients verteilt werden, die dann damit arbeiten. Wurden die Dateien auf dem Client bearbeitet, so sollen sie wieder an den Server geschickt werden. Der Server sammelt alle Resultate, und man soll überwachen können welche Übertragungen an welche Clients aktiv sind und welcher Job in wie weit fortgeschritten ist. Der Client soll automatisch benachrichtigt werden, wenn ihm ein neuer Job zugewiesen wurde, dann kann er diesen annehmen. Auch Clientseitig sollen Aktionen protokolliert werden und aktuelle Jobs angezeigt werden.
Die GUI spielt dabei eine Nebenrolle, sie soll leicht austauschbar sein, da ich auch mit MVP bzw. MVVP experimentieren möchte. Ich habe mir gedacht, dass ein WCF Service hier die zentrale Rolle spielen soll. Dieser bietet mir eine Facade mit der jeder Client interagieren kann. Die „Server“ Anwendung soll eigentlich hauptsächlich ein Administrations Tool sein, mit welchem ich Jobs anlegen bzw. zuweisen, Statistiken auslesen und aktive Nutzer sehen kann.
Ich habe mir überlegt im Service Methoden anzubieten wie getNewJobs() getAllJobs() updateJob(). Soll ich die Datenübertragung an sich über eine Methode a la startJob() über den Service steuern, oder nur mit getNewJobs() anhand der Datenbankeinträge überprüfen ob neue Jobs für den Client angelegt sind und diese dann über eine direkte Verbindung zum Server (oder zum Rechner auf welchem die Dateien liegen) übertragen. Welche Übertragungsmethode eignet sich am besten für große Dateien mit .NET? Kann ich über den Service Events feuern, wenn z.B. ein Client einen Job via updateJob() aktualisiert hat, dass der Server den entsprechenden Event abonniert hat und eine ListView aktualisiert?
Erfahrung im Software Design habe ich schon, jedoch bin ich hatte ich bisher nur zeitweise mit .NET zu tun. Mir reichen schon ein paar Tipps und Hinweise, ich möchte nur etwas in die entsprechende Richtung geschubst werden 😉
Also ich bin inzwischen selbst auf folgende Methode gestoßen:
Man bindet den winspool Treiber ein
[DllImport("winspool.Drv", EntryPoint = "OpenPrinterA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
public static extern bool OpenPrinter([MarshalAs(UnmanagedType.LPStr)] string szPrinter, out IntPtr hPrinter, IntPtr pd);
Die Abfrage ob ein Drucker Online ist oder nicht sieht dann folgendermaßen aus:
public bool PrinterIsOnline(string PrinterName)
{
bool isOnline = false;
IntPtr hPrinter = new IntPtr(0);
if(OpenPrinter(PrinterName.Normalize(), out hPrinter, IntPtr.Zero))
isOnline = true;
return isOnline;
}
Nach ein paar Versuchen kann ich sagen, dass es wirklich funktioniert. Falls jemand noch Anmerkungen, Kritik hat etc. bitte raus damit! Es funktioniert zwar, doch das dies der gängige Weg ist, wage ich zu bezweifeln.
Viele Grüße
Ein herzliches Hallo an alle,
aktuell befasse ich mich mit der Frage, wie ich am einfachsten erfahren kann, ob ein Netzwerkdrucker erreichbar ist oder nicht? Ganz ohne Dialoge etc. also einfach anhand der Adresse im Netzwerk: \RechnerA\DruckerA
Das ganze soll in einer Assembly verpackt werden und dann auf einem MSSQL Server 2005 eingebunden werden.
Eine Lösung hatte ich schon:
PrintDocument printDocument = new PrintDocument();
printDocument.PrinterSettings.PrinterName = pathToFile;
isOnline = printDocument.PrinterSettings.IsValid;
Jedoch meckert hier der SQL-Server, da diese Lösung auf .NET 1.1 basiert und der möchte doch gerne was von .NET 2.0 😕
Gibt es hierfür eine einfache Lösung?
Viele Grüße
Hallo Peter,
bool genehmigt = (bool)Eval("Genehmigt");
bool.Parse(Eval("Genehmigt"));
und allerhand Variationen in diese Richtung.
Als Fehler spuckt er mir immer "Datenbindungsmethoden wie Eval(), XPath() und Bind() können nur im Kontext eines datengebundenen Steuerelements verwendet werden."
Bin auch schon auf das hier gestoßen, aber irgendwie bringt mich das grade auch nicht weiter 😦
Hallo Leute,
ich geb hier in einer ListView Daten aus. Die ListView ist sortierbar und eine Pagination ist implementiert, das ganze ist mit JQuery nach diesem Tutorial realisiert. Läuft alles Prima, meine egtl. Frage ist wie kann ich den einen Boolwert prüfen. Mit Eval krieg ich die Sachen ja nur ausgegeben, hab es schon mit casts usw. probiert.
Also der Wert "Genehmigt" ist also boolwert gespeichert und es sollen unterschiedliche Links ausgegeben werden, je nachedem welchen Wert "Genehmigt" hat, das würde ich gerne prüfen.
<%
HotelBuchungssystem.Models.BuchungsRepository br = new HotelBuchungssystem.Models.BuchungsRepository();
OverViewListView.DataSource = br.FindAll();
OverViewListView.DataBind();
%>
<asp:ListView ID="OverViewListView" runat="server">
<LayoutTemplate>
<table id="OverViewListView" border="0" cellpadding="0" cellspacing="0" class="data-table">
<thead>
<tr>
<th></th>
<th>
BuchungsID
</th>
<th>
UserID
</th>
<th>
ZimmerID
</th>
<th>
StartDatum
</th>
<th>
EndDatum
</th>
<th>
Kommentar
</th>
<th>
Genehmigt
</th>
</tr>
</thead>
<tbody>
<tr id="itemPlaceholder" runat="server" />
</tbody>
<tfoot>
<tr id="pager">
<td colspan="7" style="border-right: solid 3px #7f7f7f;">
<img src="../../Content/Images/first.png" class="first" alt="First"/>
<img src="../../Content/Images/prev.png" class="prev" alt="Next"/>
<input type="text" class="pagedisplay"/>
<img src="../../Content/Images/next.png" class="next" alt="Next"/>
<img src="../../Content/Images/last.png" class="last" alt="Last"/>
<select class="pagesize">
<option value="5">5</option>
<option value="10">10</option>
<option value="15">15</option>
<option selected="selected" value="20">20</option>
<option value="50">50</option>
<option value="100">100</option>
</select>
</td>
</tr>
</tfoot>
</table>
</LayoutTemplate>
<ItemTemplate>
<td><asp:HyperLink Text="Genehmigen" NavigateUrl='<%#"/Buchung/Approve/" + Eval("BuchungsID").ToString() %>' ID="hl1" runat="server"/></td>
<% }
<td><%# Eval("BuchungsID") %></td>
<td><%# Eval("UserID") %></td>
<td><%# Eval("ZimmerID") %></td>
<td><%# Convert.ToDateTime(Eval("StartDatum")).ToShortDateString()%></td>
<td><%# Convert.ToDateTime(Eval("EndDatum")).ToShortDateString()%></td>
<td><%# Eval("Kommentar") %></td>
<td><%# Eval("Genehmigt") %></td>
</tr>
</ItemTemplate>
</asp:ListView>
Hey Leute,
ich hab in meinem asp.net Projekt eine ganz normale Datenbank eingebunden dbxxx.mdf. Nun habe ich einen haufen "Dummydaten" durch testen usw. drin und würde gerne den kompletten Inhalt der DB löschen. Manuelles löschen wäre ja auch möglich, aber dann zählt er mir ja die IDs trotzdem weiter hoch. Hat jemand einen Tipp wie ich den kompletten Inhalt löschen kann und auch alle ID
s wieder von 1 starten?
verwendetes Datenbanksystem: <MS SQL Express 2005>
Okay danke Euch 😃 Mach mich gleich an die Arbeit.
Hey Th69,
gut okay, da könnte ich auf die entsprechende Column abprüfen, das würde aufjedenfall schon mal funktionieren. Ein Problem dabei wäre aber, dass sich alle ListViews auf diesem Form an diesselbe SortierKlasse hängen, dann müsste ich praktisch für die besprochene ListView eine eigene spezielle Klasse erstellen und dann diese anhängen oder?
Gruß
Hey Leute,
wie der Titel schon sagt, will ich eine ListView mit Checkboxen sortieren und zwar ganz einfach bei Click auf die Column nach selektiert bzw. nicht selektiert. In meiner Klasse die für alle anderen Sortiertaktionen für ListViews zuständig ist (aus einem Tutorial von MS) gibt es ja eine Stelle an der die Items verglichen werden
compareResult = ObjectCompare.Compare(listviewX.SubItems[ColumnToSort].Text, listviewY.SubItems[ColumnToSort].Text);
Gut wenn ich hier umstelle auf
compareResult = ObjectCompare.Compare(listviewX.checked, listviewY.checked);
sortiert er mir schonmal die gechecketen bzw. nichtgecheckten richtig. Aber wie kann ich in der Compare Methode unterscheiden wann er wie sortieren soll? Also nach Checkboxen und wann ganz normal nach Zahl bzw. Alphabet. Sorry wenn ich grad ein bisschen auf dem Schlauch stehe.
Gruß