2010-11-23 8 views
1

Ich weiß, das ist ein heißes Thema auf StackOverflow, aber ertragen Sie mit mir.Silverlight, WCF und NotFound, oh mein

Wir haben eine Silverlight 3-Anwendung, die mit einem WCF-Dienst kommuniziert. Hin und wieder geben Aufrufe an den WCF-Dienst eine NotFound-Ausnahme zurück.

Ich habe so ziemlich jeden Beitrag auf SO und Google zu diesem Thema gelesen, aber ich kann nicht herausfinden, was schief läuft. Hier einige meiner Ergebnisse:

  • Die Ausnahme passiert bei zufälligen Aufrufen und zufälligen Momenten. Manchmal funktioniert eine Methode 50 Mal und plötzlich kommt es zu Fehlern. Ich habe das Gefühl, dass es mit einem Timeout zusammenhängt, da es am besten reproduzierbar ist, wenn ich die Anwendung eine Weile im Leerlauf lasse, bevor ich einen Anruf tätige, aber das ist nicht immer der Fall - manchmal scheitert der erste Anruf in der Anwendung.
  • Wir verwenden das SilverlightFaultBehavior, um den HTTP-Fehlercode in 200 zu konvertieren, und wir haben viele Instanzen, bei denen eine Ausnahme auf der Serverseite tatsächlich auf die Clientseite aufblubbert, also kann ich bestätigen, dass dies wie erwartet funktioniert.
  • Fiddler zeigt in dem Moment, in dem die Ausnahme auftritt, nichts Besonderes an. Ich sehe den fraglichen Anruf nicht einmal. Das beunruhigt mich, aber es könnte bedeuten, dass die Ausnahme das Ergebnis eines Anrufs ist, der vor ein paar Minuten passiert ist und das Zeitlimit überschritten hat?
  • Service Trace Viewer zeigt nichts an.
  • Ich füge Visual Studio an Silverlight-Projekt und an das WCF-Dienstprojekt an, setze Debugging, um alle Ausnahmen (geworfen oder behandelt) zu unterbrechen, und es bricht nicht (außer in Silverlight, um mir über das NotFound-Problem zu erzählen). Das veranlasst mich zu denken, dass der NotFound möglicherweise nicht auf eine Ausnahme auf der WCF-Dienstseite reagiert?

Ich habe wirklich keine Ahnung, wohin ich von hier gehen soll. Jede Hilfe, alle Hinweise oder Ideen zu versuchen, sind willkommen.

+0

Hallo, ich weiß, es ist ein alter Post, aber ich habe das gleiche Problem. Konnten Sie dieses Problem lösen? – Luis

Antwort

1

Hier sind einige Gedanken für die Punkte, die Sie erwähnt:

1) Die Ausnahme auf zufällige Anrufe geschieht und wahllos Momente - Machen Sie die Daten sicher, als ein Wert von Methodenrückgabe gesendet werden gültig ist. Ich hatte einen Fall beim Senden eines Objekts mit einigen leeren Eigenschaften verursacht einen Fehler in der Serialisierung. Ich habe dies mit IIS-Logs/Service-Trace-Logs herausgefunden.

2) Also, haben Sie etwas Nützliches gefunden?

3) Ich glaube nicht, dass Fiddler mit dieser Art von Fehler helfen kann.

4) Sind Sie sich sicher? Haben Sie Trace Logs korrekt eingerichtet?

5) Sie werden keine Ausnahmen finden, die Ihnen hier helfen können. Die tatsächliche Ausnahme (wenn Sie den Fehler "Nicht gefunden" sehen) wird beim Umbrechen der Nachricht/Daten von der Serverseite oder beim Auspacken von Nachrichten/Daten auf der Clientseite ausgelöst.

Also zusammenfassend stellen Sie sicher, dass die Daten im richtigen Format sind (mag für Sie richtig zu sein, aber nicht WCF, spielen Sie einfach für eine Weile mit anderen Werten) und verifizieren Sie die Trace-Logging erneut.

+0

2) Ich erwähnte dies, um zu vermeiden, dass Leute mir sagen, NotFound ist nur ein Ergebnis irgendeiner Ausnahme auf der Serverseite. Ich bekomme nichts Nützliches daraus. 3) Ich würde zumindest erwarten, dass der Anruf beim WCF-Dienst stattfindet, nein? 4) Soweit ich weiß, ja. Ich kann in diesen Logs viel Aktivität sehen - nur nichts, was für mein Problem relevant erscheint. - Was mich am meisten stört ist, dass es sehr schwer ist, die Daten in einem korrekten Format zu sichern, da ich nicht weiß, welche Aufrufe fehlschlagen werden, und Fiddler hilft nicht zu sagen, welche Daten gesendet werden über den Draht. – efdee

+0

Oh, und die Tatsache, dass dies scheinbar aus dem Nichts geschah. Ich bin mir sicher, dass ich oder einige meiner Kollegen Änderungen vorgenommen haben, aber jetzt scheint es überall zu passieren. Und sehr zufällig. – efdee

+0

"und Fiddler hilft nicht dabei zu sagen, welche Daten über die Leitung gesendet werden" - deshalb habe ich gesagt, dass es in diesem Szenario keine große Hilfe sein kann. – decyclone

1

Was ist eine Bindung des Dienstes? Wo ist es gehostet: IIS oder VS Deployment Server? Ich habe dieses Problem kürzlich gesehen, etwas stimmte nicht mit IIS. Es konnte nicht einmal * .svc Dateien öffnen. ist also hier ein Plan von Aktivitäten:

  1. Versuchen wie http://localhost/MyApp/MyService.svc svc-Datei mit http-Adresse zu öffnen
  2. Wenn sie sich öffnet, eine Konsolenanwendung schreiben und den Service zu testen.
  3. Wenn es funktioniert, schreiben Sie eine Silverlight einfache Anwendung.

Ich hoffe, dass dies helfen wird.

+0

Im Allgemeinen funktioniert alles. Die Silverlight-App kann 100-Sekunden erfolgreich machen und dann plötzlich einmal mit dieser Fehlermeldung fehlschlagen. Ich versuche mit VS-Dev-Server, ich hoffe, dass, sobald ich in IIS das Problem wird weggehen, aber selbst dann, es ist ein Ärgernis bei der Entwicklung. – efdee

0

Ich reparierte diese durch

minFreeMemoryPercentageToActivateService="1" 

zu Web.config hinzufügen. Standardmäßig ist es

minFreeMemoryPercentageToActivateService="5" 

was manchmal diesen Fehler verursacht.

Verwandte Themen