2010-04-19 16 views
15

Ich habe einen Webdienst, der Daten an die Desktopanwendung zurückgibt. Das Problem, das ich habe, ist, wenn der Web-Service kleine Datenmenge zurückgibt alles funktioniert gut, aber wenn das Datenvolumen groß ist, löst die folgende Ausnahme aus:WCF-Methode zweimal aufgerufen

System.Net.WebException: Die zugrunde liegende Verbindung wurde geschlossen: An Bei einem Empfang ist ein unerwarteter Fehler aufgetreten.

Und wenn ich den Web-Service debuggen, sehe ich, dass diese bestimmte Methode zweimal aufgerufen wird. Es führt die Return-Anweisung zum ersten Mal aus, wenn nichts passiert, aber wenn es zum zweiten Mal ausgeführt wird, wird die oben genannte Ausnahme in der Desktop-App ausgelöst.

Ich habe ähnliche Beiträge vor dem Stackoverflow gefunden, aber sie haben mein Problem nicht gelöst. Kann mir bitte jemand sagen, was hier vor sich geht?

Danke!

+0

Erhalten Sie diese Ausnahme auf dem Client oder auf dem Server? Ich denke, es ist auf dem Client.In diesem Fall müssen Sie im Windows-Ereignisprotokoll nachsehen, was auf dem Server passiert. Sie können die WCF-Ablaufverfolgung auch aktivieren, um zu sehen, was im Service vor sich geht. –

+0

Es gibt nichts im Windows-Ereignisprotokoll für diese Ausnahme. Könnten Sie mir bitte helfen, den Web Service zu verfolgen? Das habe ich noch nie gemacht. Auch wenn Sie mir einen Link für den Tracer schicken könnten, wird es eine große Hilfe sein. Danke –

Antwort

12

Es könnte sein, weil die Größe der Nachricht größer als die Standardgröße der Nachricht ist. Sie könnten increasing the this value in der Konfiguration des Endpunkts versuchen. Sie können auch einen Blick auf this post werfen.


UPDATE:

Um das Problem zu diagnostizieren würde ich vorschlagen, Sie die Spur auf den Dienst zu aktivieren, indem Sie die folgenden in der Konfigurationsdatei setzen:

<system.diagnostics> 
    <trace autoflush="true"> 
    </trace> 
    <sources> 
     <source name="System.ServiceModel" 
       switchValue="Information, ActivityTracing" 
       propagateActivity="true"> 
      <listeners> 
       <add name="sdt" 
        type="System.Diagnostics.XmlWriterTraceListener" 
        initializeData="WcfDetailTrace.e2e" /> 
      </listeners> 
     </source> 
    </sources> 
</system.diagnostics> 

Dies wird erzeugen die WcfDetailTrace.e2e Spur Datei, die Sie mit der Service Trace Viewer Tool öffnen können, die Ihnen umfangreiche Informationen über den Anruf und die Fehlermeldung zur Verfügung stellt.

+0

Die Größe ist nicht das Problem. Ich setze die Größe auf 16 MB und die übertragenen Daten sind weniger als das. Ich habe mir die beiden genannten Beiträge zwar schon angesehen, aber scheinbar nicht geholfen. Irgendwelche anderen Vorschläge bitte? Danke .. –

+1

@Saurabh, bitte sehen Sie mein Update. –

+1

@DarinDimitrov Dieser rettete mein Leben und Projekt, konnte nicht herausfinden, was falsch war. In der Ablaufverfolgung wurde festgestellt, dass EF-Entity kein Datenvertrag ist. Vielen Dank! :) – Hitin

6

Ich hatte dieses Problem vor kurzem.

Es stellte sich heraus, dass die Analyse des WCF-Protokolls, wie von System.Diagnostics.XmlWriterTraceListener geschrieben, zu einem Problem mit dem Datenvertrag führte, den ich eingerichtet hatte.

Ich bin zurück Dictionary<int, object> (Side Note: Ja, ich weiß, das ist wirklich schlecht !, aber ich bin jung und brauche das Geld). Ich habe das [Knowntype] Attribut auf dem Rückgabewert für die Datacontract enthalten:

[DataContract] 
    [KnownType(typeof(Dictionary<int, double>))] 
    [KnownType(typeof(Dictionary<int, ChannelData>))] 
    [KnownType(typeof(Dictionary<string, Dictionary<int, double>>))] 
    public class MyCoolObject: ICoolObject 
    { 
[DataMember] 
     public Dictionary<string, object> Results 
     { 
      get { return _results; } 
      set { _results = value; } 
     } 
    } 
1

ich dieses Problem vor kurzem hatte, und es stellte sich heraus, dass ich vergessen habe eine der Datenübertragungsklassen markieren mit [Datacontract]

5

Ich hatte auch dieses Problem. Für mich war es passiert, weil ich eine [DataMember] Eigenschaft mit einer get{} aber keine set{} hatte. Nach dem Hinzufügen einer set{} wurde dieses Verhalten gestoppt.

+0

Vielen Dank! Das hat mein Problem gelöst. Ich verstehe nicht, warum das so ist. – Husain

+0

Hallo, ich habe auch das selbe Problem mit einem get {} aber keinem Satz {}. Was diese Eigenschaft wirklich bedeutete, ist diese Eigenschaft – Veeresh123

1

Ich stieß auf das gleiche Problem. Es stellte sich heraus, dass WCF DateTime nicht als JSON zurückgeben konnte, also musste ich es Nullable<DateTime> machen.

1

Ich hatte auch dieses Problem und meine Lösung war ähnlich wie Batgar, aber mit einer Wendung. Ich hatte eine Klasse, die eine Eigenschaft des Typs object hatte. Ich musste der Klasse KnownType Attribute für jeden Typ hinzufügen, den das Objekt halten könnte. Ich konnte die KnownType nicht während der Fahrt auffüllen, da die Klasse nicht wusste, was das Objekt enthalten wird.

Verwandte Themen