我使用 .NET Framework 4.5。创建了一个新项目 WCF,其中已经有一个使用 CompositeType 的示例。然后创建了控制台和 ASP.NET MVC 4 应用程序。在两个项目中进一步添加了服务参考。为什么在项目 ASP.NET MVC 4 中生成了一个空类(参考中)?如果去掉服务接口中的 CompositeType 就万事大吉了。在控制台应用程序中没有这样的问题,一切都正确创建。
1 回答
这是 VS 2012 中的一个已知问题。在修复可用之前,您可以使用以下变通方法来使您的工作正常。看看这个博客。
在 VS 2012 MVC 4 项目中,您是否在使用“添加服务引用”对话框向 WCF 服务添加服务引用时发现了一个空的 reference.cs 文件?
这是您可以做的:
检查您的错误选项卡是否显示一些错误,例如...
警告 1 自定义工具警告:无法导入 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='IService1']
如果是这样,您可以使用以下解决方法:
在添加服务引用对话框 -> [高级...] -> 在引用的程序集中重用类型(默认选中) -> 选择非默认的“在指定的引用程序集中重用类型”单选 -> 确保排除 Newtonsoft.Json。列表中的 dll。现在尝试添加服务引用,看看是否成功。
或者,您可以在生成代理时删除此 Newtonsoft.Json.dll 的引用,并在代理生成完成后将其添加回来。