Guten Tag.
Angenommen ich habe einen Webservice, dem ich Daten übergeben kann, die dann in eine Datenbank geschrieben werden.
Diesen Webservice spreche ich mit Ajax an.
Wie kann ich denn nun sicher gehen, dass nicht jeder, der den entsprechenden Aufruf kennt, direkt meinen Webservice, und damit meine Datenbank, mit Daten befeuern kann?
Alle Parameter können ja immer ausgelesen werden, da es sich um Javascript handelt...
Vielen Dank.
Habe jetzt einfach die OnServerClicks durch Post-Requests ersetzt.
Projekt übernehme ich nur temporär, daher konnte ich keine größeren Änderungen Richtung DB angehen.
Danke.
Ich war sehr lange in der ASP MVC Welt unterwegs und bin jetzt leider gezwungen, ein Projekt im klassischen Stil umzusetzen. Hilfe! 😉
Dabei habe ich folgendes Problem:
ich habe ein Control, welches ich auf einer Seite mehrfach einbinde. Dieses Control enthält einen Link, der ein onserverclick-Event auslöst und nach außen verfügbar macht. Die umgebende Seite abonniert dieses Event und reagiert entsprechend (in diesem Fall ein Vote für das entsprechende Item/Control).
So wie ich es jetzt verstanden haben, lädt der Postback quasi die Seite neu und führt danach mein Event aus (vote). Problem ist dabei nur, dass ich damit folgenden Ablauf habe:
Seite baut sich auf > Ich klicke vote > Postback > Vote wird in der DB gespeichert > Seite neu angezeigt > Vote ist aber nicht zu sehen (steht aber in der DB)
Erst ein Refresh der Seite zeigt dann auch wirklich den Vote an.
Es kann doch jetzt nicht Sinn der Sache sein, dass ich Abfrage ob ich mich im Postback befinde und dann den Vote nur für die Anzeige noch mal erhöhe.
Wie geht man denn normalerweise mit solch einem Szenario um?
Bei mir ging es um eine Excel-Datei, die komplette ausgelesen wird. Die ausgelesenen Daten sollten dann in ein entsprechendes Objekt überführt und in der DB gespeichert werden.
Ich reiche die Daten jetzt bis ins Repository durch und erstelle das Objekt erst dort und bei Bedarf, nicht mehr für alle Daten.
Klappt prima, vielen Dank für deine Hilfe.
Ok, würde behaupten, dass ich das so weit verstanden habe 😉
Ich muss die Id also bis ins Repository reichen und mir dort das passende Objekt holen... Oder gibt es noch andere Lösungsansätze?
Vielen Dank erstmal.
Aber wieso klappt es denn dann ohne den Repository-Aufruf? Dort weise ich doch dann quasi auch employee.Location =meinAnderesObjekt zu, oder nicht?
Ich habe in einem Daten-Model die Entity "Location" mit folgender Methode innerhalb des zugehörigen Repositories:
public Location GetLocation(int locationId)
{
Location location = Context.Locations.First(l => l.Id == locationId);
if (null == location)
throw new ArgumentNullException("Location-Id: " + locationId);
return location;
}
Diese Methode wiederum rufe ich in einer Methode > Schleife auf:
for (int i = 1; i <= values.GetLength(0); i++)
{
Employee employee = new Employee();
...
employee.Location = employeeRepository.GetLocation(locationId);
...
employees.Add(employee);
}
Innerhalb der For-Schleife werden Objekte erstellt, einer Liste hinzugefügt und am Ende wieder an das Repository gegeben:
employeeRepository.UpdateEmployees(employees);
Nun habe ich folgenden Effekt: jedes Objekt, für welches ich GetLocation aufgerufen habe, hat den EntityState "added", obwohl ich an keiner Stelle etwas schreibe, sondern nur auslese. Rufe ich also SaveChanges auf, verdoppeln sich die gesamten Einträge in der DB.
Ändere ich also den Aufruf innerhalb der Schleife folgendermaßen, habe ich den Verdopplungseffekt nicht, da ich den Repository-Aufruf nicht habe:
for (int i = 1; i <= values.GetLength(0); i++)
{
Employee employee = new Employee();
...
employee.Location = new Location() { Id = 1, Name = "Berlin" };
...
employees.Add(employee);
}
Hilfe! 😃
Vielen Dank im Voraus!
Ich möchte für eine bestehende Datenbank den Service Broker aktivieren, da ich momentan die Fehlermeldung "Der SQL Server Service Broker für die aktuelle Datenbank ist nicht aktiviert. Als Folge davon werden keine Abfragebenachrichtigungen unterstützt. Aktivieren Sie den Service Broker für diese Datenbank, wenn Sie Benachrichtigungen verwenden möchten." erhalte, wenn ich das zugehörige Projekt starten möchte.
Für die Aktivierung habe ich folgenden Befehl versucht: "ALTER DATABASE myDb SET ENABLE_BROKER"
Die Abfrage wird dann auch ausgeführt, scheint nur einfach kein Ende zu nehmen. Nach einer Laufzeit von 2,5 Tagen habe ich eben abgebrochen 😉
Gibt es eine andere Möglichkeit, den Service Broker zu aktivieren?
Update: Datenbank offline und dann wieder online schalten, Eigenschaften aufrufen und dort das Service Broker Flag auf true setzen. Jetzt gehts 😃
Argh, man muss einfach die Teamprojektsammlung noch mit in die URL packen, also z.B. http://xxx.xxx.xxx.xxx:8080/tfs/DefaultCollection. Klappt dann ohne Probleme 😃
Vielen Dank für deine Links!
Ich habe hier einen frischen TFS 2010 aufgesetzt und dieser läuft so weit ohne Probleme. Mit VS 2010 kann ich mich ohne Probleme verbinden, Teamprojekte erstellen etc.
Leider schaffe ich es jedoch nicht, mit Visual Studio 2008 zuzugreifen. Dies lag im ersten Schritt daran, dass der TFS 2010 standardmäßig eine URL wie http://xxx.xxx.xxx.xxx:8080/tfs hat, welche man in Visual Studio 2008 gar nicht eingeben kann.
Für dieses Problem gibt es ein Update von Microsoft mit dem tollen Namen "Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010". Dieses und das erforderliche SP1 für VS 08 habe ich installiert, was zur Folge hat, dass ich die richtige URL eingeben kann. Dennoch bekomme ich keine Verbindung zu meinem neuen TFS 2010.
Hat jemand eine Idee? Vielen Dank.