使用稍微复杂的方法引用WCF服务时获取"递归收集数据协定"

Nie*_*nch 5 .net wcf wsdl exception-handling

如果我在WCF服务中只使用简单的方法,一切正常.但是,如果我包含以下方法,则会出现问题:

[OperationContract]
public List<KeyValuePair<string, string>> GetAllAccounts()
{
    return AccountBusiness.GetAllAccounts();
}
Run Code Online (Sandbox Code Playgroud)

从其他项目引用服务时出现此错误:

警告5自定义工具警告:无法导入wsdl:portType详细信息:运行WSDL导入扩展时抛出异常:System.ServiceModel.Description.DataContractSerializerMessageContractImporter错误:类型'Newtonsoft.Json.Linq.JToken'是一个递归收集数据合同,不受支持.考虑修改集合'Newtonsoft.Json.Linq.JToken'的定义以删除对它自己的引用.XPath到错误源:// wsdl:definitions [@ targetNamespace =' http://tempuri.org']/wsdl:portType [@ name ='NodeService'] C:\ inetpub\wwwroot\MyclientProject\Service References\NodeService\Reference.svcmap 1 1 MyClientNode

如果我删除上面的方法,重新编译并更新引用,那么它工作正常.但是当我添加上述方法时,我始终会收到此警告.

我发现的一个建议是卸载Visual Studio 2012并修复Visual Studio 2010.我不想这样做.

另一个建议取消选中"在所有引用的程序集中重用类型",但这会弄乱方法签名并且不可用.

Nie*_*nch 6

事实证明,错误是由于我从NuGet安装了一个包含Json.NET的Microsoft Web API包.卸载后,它工作正常.

这可能是您的答案 - 如果没有,请查看您已安装的其他软件包(您不需要)并将其删除.

  • 您不必删除软件包,您现在可以在服务中使用它们:http://nirlevy.blogspot.co.il/2012/08/cannot-import-wsdl-porttypedetail.html (11认同)