Der WCF-Webdienst schlägt beim Empfang mit großen Daten fehl

8

Ich rufe einen WCF-Webdienst lokal (oder remote) auf, der mit kleinen Datenmengen (etwa 25 Zeilen mit & lt; 1K Dateneinheiten) gut funktioniert. Wenn die Daten jedoch größer werden (etwa 300 Zeilen), schlägt der Web-Service fehl. Im Folgenden finden Sie die Ausnahme, die innere Ausnahme und die Stack-Ablaufverfolgung von der inneren Ausnahme.

Der Dienst scheint auch ungewöhnlich lange zu dauern, um lokal ausgeführt zu werden (ich füge das hinzu, weil es Ihnen vielleicht einen Hinweis in der Lösung gibt). Die große Menge an Daten zu erhalten dauert 3s serverseitig und die kleine Menge an Daten dauert 1s serverseitig. Das Ausführen des Webdienstes (lokal), um die kleine Datenmenge zurück zu erhalten, dauert jedoch 24 Sekunden.

Ich habe auch die Bindungsinformationen aus der app.config aus meiner Client-Testanwendung eingefügt.

========= BINDUNGSINFORMATIONEN ===========

%Vor%

========= AUSNAHMEDATEN ==============

%Vor%     
Tshepang 25.08.2009, 15:18
quelle

5 Antworten

2

Um erweiterte Fehlerinformationen zu erhalten, verwenden Sie SvcTraceViewer .

    
Darin Dimitrov 25.08.2009 15:26
quelle
2

Es gibt eine Reihe von Dingen, die schief gehen könnten.

Zuerst, wie "darin" bereits vorgeschlagen hat - versuchen Sie, die Nachrichtenverfolgung einzuschalten und zu sehen, was das erzeugt.

Zweitens - es könnte zu einer Zeitüberschreitung kommen. Sie haben gesagt, dass Ihr kleiner Datensatz ungefähr 24 Sekunden benötigt, um wieder zurück zu kommen. Ihr größerer Datensatz ist 12 mal so groß (300 vs. 25 Zeilen). Das könnte also 288 Sekunden dauern - aber Ihr sendTimeout ist auf 2 Minuten eingestellt könnte der Grund sein. Versuchen Sie, diese Einstellung zu erhöhen, sagen wir 10 Minuten - das sollte ausreichend Zeit sein:

%Vor%

Wenn das das Problem nicht löst, könnten Sie versuchen, Streaming zu verwenden, um die großen Datenmengen zurück zu bewegen:

%Vor%

Solange nur Ihre Antworten groß sind, sollte das funktionieren. Natürlich müssten Sie Ihren Client neu ansprechen, indem Sie den Dienst ein wenig aufrufen, um mit dem Streaming zu arbeiten (erstellen Sie eine Operation contract = Service-Methode, die einen Stream als Rückgabewert zurückgibt und den Stream zum Lesen der Daten in Chunks verwendet Server). Wenn das ein gängiges Szenario für Sie ist, könnte das funktionieren und die Mühe wert sein (und es würde Ihnen erlauben, Ihre Puffergrößen wieder zu reduzieren, um einen Denial-of-Service-Angriff zu vermeiden, indem Sie mit riesigen Nachrichten überflutet werden) >

Sehen Sie sich eine großartige Einführung in WCF-Nachrichten-Streaming für weitere Informationen an beim Streaming.

Und wenn nichts hilft - komm zurück und lass es uns wissen!

Marc

    
marc_s 25.08.2009 17:02
quelle
0

Möglicherweise fehlen Ihnen einige Konfigurationen auf der Serverseite.

    
Shiraz Bhaiji 25.08.2009 16:38
quelle
0

Versuchen Sie Folgendes: im Abschnitt system.web. Legen Sie das Attribut maxRequestLength fest.

%Vor%     
rcaval 21.12.2010 19:12
quelle
0

Dieser Fehler kann auf einen nicht übereinstimmenden Vertrag zurückzuführen sein. Betrachten Sie die dreistufige Anwendung unten ...

%Vor%

In diesem Fall erhalten wir den gleichen Fehler in der Prozessschichtantwort.

Derselbe Fehler tritt in anderen Vertragskonflikten in mehrschichtigen Anwendungen auf.

    
Abhijit Kumar 09.05.2013 04:30
quelle

Tags und Links