2012-08-22 22 views
5

Si utilizo solo métodos simples en mi servicio WCF, todo funciona bien. Sin embargo, si incluyo el siguiente método, se produce un problema:Obteniendo el "Contrato de datos de recopilación recursivo" al hacer referencia a un servicio WCF con un método un tanto complejo

[OperationContract] 
public List<KeyValuePair<string, string>> GetAllAccounts() 
{ 
    return AccountBusiness.GetAllAccounts(); 
} 

me sale este error cuando se hace referencia al servicio de otro proyecto:

Warning 5 Custom tool warning: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter Error: Type 'Newtonsoft.Json.Linq.JToken' is a recursive collection data contract which is not supported. Consider modifying the definition of collection 'Newtonsoft.Json.Linq.JToken' to remove references to itself. XPath to Error Source: //wsdl:definitions[@targetNamespace=' http://tempuri.org ']/wsdl:portType[@name='NodeService'] C:\inetpub\wwwroot\MyclientProject\Service References\NodeService\Reference.svcmap 1 1 MyClientNode

Si quito el método anterior, compilar y actualizar la referencia, entonces funciona bien. Pero cuando agrego el método anterior, constantemente recibo esta advertencia.

Una sugerencia que encontré fue desinstalar Visual Studio 2012 y reparar Visual Studio 2010. No quiero hacer eso.

Otro suggested para desmarcar "Reutilizar tipos en todos los ensamblados a los que se hace referencia", pero esto arruina las firmas de método y no se puede utilizar.

Respuesta

7

Al final resultó que, el error fue causado por el hecho de que tenía un paquete de Microsoft Web API instalado desde NuGet, que incluía Json.NET. Después de desinstalar esto, funciona bien.

Esta puede ser la respuesta para usted; de lo contrario, observe qué otros paquetes ha instalado (que no necesita) y quítelos.

+11

No tiene que quitar los paquetes, ahora puede usarlos en el servicio: http://nirlevy.blogspot.co.il/2012/08/cannot-import-wsdl-porttypedetail.html –

+1

Nir , esto fue increíblemente útil. ¡Gracias! – benjy

1

La biblioteca NewtonSoft.Json que está instalada en el servidor no es la misma que está instalada en el cliente de NuGet. Esta es la razón por la cual la referencia del servicio no puede reutilizarlo.

En este caso, simplemente haga clic en 'Reutilizar tipos en ensamblados referenciados especificados', verifique todo excepto el ensamblaje Newtonsoft.Json y vuelva a generar.

La referencia de servicio ahora se generará sin errores.

Cuestiones relacionadas