Ich benutze Visual Studio 2010 und MS SQL Server 2005. Ich bin neu in WCF und ich versuche zu lernen, während ich eine kleine Anwendung zur Verwaltung von Aufgaben entwickle.
Im Moment habe ich eine Lösung mit zwei Konsolenanwendungen drin - der WCF-Dienst - Ein Client, der eine Verbindung zum WCF-Dienst herstellt, um meinen Code zu testen
Der WCF-Dienst stellt über LINQ to SQL eine Verbindung zu einer Datenbank her. Ich habe einen OperationContract implementiert, der etwas in die db hinter dem WCF-Dienst einfügt und es funktioniert. Ich habe einen OperationContract implementiert, der eine GUID vom WCF-Dienst an den Client zurückgibt, und das funktioniert auch.
Wenn ich versuche, eine Liste von List vom WCF-Dienst abzurufen, schlägt der folgende Fehler fehl:
"Beim Empfang der HTTP-Antwort an localhost: 8000 / TaskerTest / Service / operations ist ein Fehler aufgetreten. Dies könnte daran liegen, dass die Service-Endpunktbindung das HTTP-Protokoll nicht verwendet. Dies könnte auch auf eine HTTP-Anfrage zurückzuführen sein Kontext wird vom Server abgebrochen
InnerException: Die zugrunde liegende Verbindung wurde geschlossen: Bei einem Empfang ist ein unerwarteter Fehler aufgetreten.
Meine Verträge (die ersten beiden arbeiten. GetLists ist das Problem):
%Vor%Die Implementierung:
%Vor%Der DB-Zugangscode:
%Vor%Und der Client-Code (der WCF-Service wird als Service-Referenz zum Client-Projekt hinzugefügt):
%Vor%Der Client schlägt mit der oben genannten Ausnahme fehl: client.GetLists ();
Ich kann zusätzliche Informationen bereitstellen, die von Lesern benötigt werden.
AKTUALISIEREN
Ich habe die Verfolgung mit
aktiviert %Vor%Dann habe ich Microsoft Service Trace Viewer auf dem generierten Protokoll ausgeführt und den folgenden Fehler erhalten:
Beim Versuch, Parameter zu serialisieren, ist ein Fehler aufgetreten. Die InnerException-Nachricht war 'Type' System.DelegateSerializationHolder + DelegateEntry 'mit dem Datenvertragsnamen' DelegateSerializationHolder.DelegateEntry: http: //schemas.datacontract.org/2004/07/System 'wird nicht erwartet
Ich habe [DataContract] zur Klasse "ToDoList" in meiner dbml-Datei hinzugefügt und erhalte jetzt keine Ausnahme. Ich bekomme die richtige Anzahl von Ergebnissen in meinem Client, aber der Inhalt jeder Klasse scheint leer zu sein.
Meine Datenbankklassen wurden automatisch mit einer dbml-Datei (LINQ to SQL) generiert.
Nachdem ich der ToDoList-Klasse in "TaskerModel.designer.cs" (der automatisch generierten Datei) ein [DataContract ()] - Attribut hinzugefügt habe, habe ich keine Ausnahme mehr erhalten, sondern die Klassen, die ich nur auf dem Client abgerufen habe hatte Standardwerte für jedes Mitglied.
Ich fügte dann allen Membern der ToDoList-Klasse [DataMember ()] Attribute hinzu und fügte
hinzu %Vor%bis
%Vor%Und jetzt funktioniert es. Ich weiß nicht, ob es einen einfacheren Weg gibt, aber es funktioniert jetzt. Wenn jemand einen besseren Weg kennt, würde ich mich über einen Kommentar freuen.
Ich hatte den gleichen Fehler beim Aufruf meines WCF-Restless-Dienstes. Das Problem schien durch den Datentyp verursacht zu werden, den ich als Antwort zurückgab.
Ich habe JSON zurückgegeben und mein Antwortobjekt hatte eine Variable mit dem Datentyp DateTime. Als ich die DateTime durch eine Zeichenfolge ersetzt habe, ist das Problem verschwunden und eine korrekte Antwort zurückgegeben worden. Wahrscheinlich wird es jemandem helfen, der auf das gleiche Problem trifft.
Ersetzen:
%Vor%mit diesem
%Vor%Tags und Links wcf