Ich habe eine recht einfache WCF-Service-Methode, die eine IQueryable, nur zum Testen zurückgibt. Vielleicht habe ich etwas falsch gemacht, wenn ich versucht habe zu verstehen, wofür IQueryable entwickelt wurde. Ich plane klar, dies später mit dem IQueryable-Provider von NHibernate zu verwenden. Aber zuerst stieß ich auf einige Serialisierungsprobleme (zumindest denke ich, dass es das Problem sein könnte), wann immer ich eine WCF-Methode benutze, die ein IQueryable zurückgibt. Es funktioniert nicht einmal für eine einfache Zeichenfolge.IQueryable Probleme mit WCF
Hier ist mein Code:
public IQueryable<string> GetEquipmentConfigurations()
{
var returnValue = new List<string>();
returnValue.Add("test");
return returnValue.AsQueryable();
}
Es ist vielleicht nicht viel Sinn haben, es ist nur zum Testen, ob ich wirklich diese IQueryables über den Draht mit WCF erhalten. Wann immer ich diese Methode mit einem Client wie SoapUI aufrufen, bekomme ich eine Socket-Ausnahme und eine Verbindung zurückgesetzt, genau so, als ob ich etwas zurückgeben wollte, das nicht als DataContract markiert ist. Aber das einzige, was ich hier mache, ist, eine lausige String-Liste zurückzugeben. Was stimmt damit nicht?
I Basichttpbinding verwenden, hier sind meine Einstellungen:
<system.serviceModel>
<services>
<service name="EquipmentConfigurationService" behaviorConfiguration="DefaultBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/Krones.KBase/Services/EquipmentConfigurationService"/>
</baseAddresses>
</host>
<endpoint address=""
binding="basicHttpBinding"
contract="Krones.MES.KBase.Public.Service.EquipmentDefinition.IEquipmentConfigurationService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="DefaultBehavior">
<serviceMetadata httpGetEnabled="True"/>
<serviceDebug includeExceptionDetailInFaults="True"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
Das Operation Attribut ist für die Schnittstelle eingestellt:
[OperationContract]
IQueryable<string> GetEquipmentConfigurations();
Alles gut funktioniert, wenn nur eine einfache Zeichenfolge zurück. Jedenfalls möchte ich später von den IQueryable-Funktionen mit LINQ profitieren.
Jeder eine Idee, was hier schief läuft?
Dank und Beifall,
Stefan
Wenn Sie Code oder XML posten, ** bitte ** markieren Sie diese Zeilen im Texteditor und klicken Sie auf die Schaltfläche "Code" (101 010) auf der Editor-Symbolleiste, um schön formatieren und Syntax markieren Sie es! –