2016-04-19 4 views
0

Ich habe einen WCF-Endpunkt, der Daten zurückgibt, die von einer Datenbank abgefragt werden. Für einen bestimmten Anruf weiß ich zum Beispiel, dass ich 175 Einträge erhalten soll. Aber mein WCF-Code gibt immer nur 105 Datensätze zurück. Ich bin in Lage, die erwarteten 175 Datensätze zu erhalten, indem Sie die gespeicherte Back-End-Prozedur ausführen, die die Endpunktfunktion ausführt. Wenn ich mich mit dem WCF Test Client mit dem Endpunkt verbinde, erhält es auch 175 Datensätze.WCF-Aufruf in Code gibt nicht alle erwarteten Daten zurück

Ich habe viele Dinge ausprobiert (Bindings, Readerquotas, Fiddler, etc ändern), konnte aber nicht feststellen, was in meinem Code anders ist. Grundsätzlich ist mein Code für den Test eine Winforms-App, die einen Service-Verweis auf den Endpunkt hat. Ich erhöhe die maxReceivedMessageSize auf 655360000 in meiner app.config, weil die Größe der Daten groß ist. Ich verwende WSHttp als meine Bindung. Unten ist der Code, der den Anruf und gibt die 105 Datensätze ausführt:

var client = new MyDataClient("WSHttpBinding_IMyData");    
var data = client.GetMyDataByDateRange("Location123", DateTime.Now.Date, DateTime.Now.Date).ToList();    
MessageBox.Show(string.Format("Got {0} records", data.Count)); // always 105 

Irgendwelche Ideen, warum Satz ein falsches Ergebnis zurückkehren würde meinen Code?

+0

Haben Sie versucht, einen Profiler in Ihrer Datenbank auszuführen, um zu sehen, wie der Abfrageaufruf erfolgt, wenn Sie Ihren WCF-Dienst über die Winforms-App aufrufen? – Rajesh

+0

@Rajesh Ich habe keinen Datenbank Profiler benutzt ... und leider habe ich hier keine Erlaubnis um mich gegen die DB zu profilieren. – DougEC

+0

Die beste Option besteht darin, einige Protokollierungsanweisungen einzufügen, kurz bevor der Aufruf der Datenbank erfolgt, die alle Parameter erfasst und überprüft, ob sie vom WCF-Testclient und Ihrer Windows-Formularanwendung – Rajesh

Antwort

2

Das bedeutet normalerweise, dass Sie 2 verschiedene Implementierungen des Dienstes aufrufen.

Überprüfen Sie, ob der Endpunkt, den Sie mit WCF Test Client verwenden, derselbe ist, den Sie in Ihrer .config Ihrer Anwendung konfiguriert haben.

+0

identisch sind. Ich habe überprüft, dass der Endpunkt in der WcfTestClient und meine app.config sind identisch. Ich habe sogar meine eigene Bindung programmatisch mit der gleichen Endpunkt-URL geschrieben und bekomme trotzdem die gleichen Ergebnisse. – DougEC

+1

Es gibt nur andere Möglichkeiten. Wenn Sie den TestClient verwenden, schreiben Sie die Parameter als Strings. In Ihrer App verwenden Sie DateTime.Now.Date. Versuchen Sie, die gleichen Zeichenfolgen in Ihrer App zu verwenden. –

+1

Oder vielleicht können Sie Ihren Dienst debuggen, so dass Sie die Werte der Parameter sehen können, wenn sie vom WCFTestClient und Ihrer Testanwendung aufgerufen werden. –