V článku WCF - Vytvoření služby jsem vytvořil službu, kde metodu GetProducts měla návratový typ IQueryable<Product>. Dneska jsem si vytvářel WPF aplikaci, ve které jsem hostoval mojí službu a klienta, abych otestoval funkcionalitu. Ovšem zde nastala chyba, že mi nefungovala komunikace jak přes http tak i přes tcp a vždy mi to vyhodilo dvě různé chyby.

http: An error occurred while receiving the HTTP response to http://localhost:9990/SimpleService/ShopService.svc. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details. 

tcp: The socket connection was aborted. This could be caused by an error processing your message or a receive timeout being exceeded by the remote host, or an underlying network resource issue. Local socket timeout was '00:00:58.3900000'.

Chybu jsem hledal všude možně, ale pořád nic. Až po delší době jsem prozkoumal WSDL dokument od mojí služby, kterou jsem měl ještě vypublikovanou na IIS a tam jsem zjistil, že návratovým typem mojí metody je "anyType". Zkusil jsem tedy změnit návratový typ na IEnumerable<Product> a nyní vše funguje tak jak má.

S tím jsem se ovšem nespokojil a pátral proč tomu tak je a našel jsem informaci o tom, že expression by se dal velmi těžko serializovat a proto IQueryable není serializovatelný...

Rada na závěr: Když budete vytvářet WCF služby, tak se vyvarujte použití IQueryable...