公共图层定义了其他图层引用和使用的对象.数据层包含数据访问代码,业务层包含业务逻辑.每个图层包含多个项目.
数据和业务层公开WCF服务,该服务将公共层中的对象作为参数.数据层和业务层都通过项目引用直接引用公共层.
业务层通过服务引用引用数据层.服务引用设置为“在引用的程序集中重用类型”,因为在单个业务层项目中有多个对数据层服务的引用,并且每个数据层服务使用公共层中的相同对象.
我正在为业务层编写单元测试,我不断得到这样的错误:Common.ClassName类型的值不能转换为Common.ClassName.类型不匹配可能是由于文件引用与程序集Common的项目引用混合造成的.尝试使用项目引用替换文件引用.
它不是文件引用,它绝对是项目引用. Looking here I see this item
To access a type defined in another assembly,the Visual Basic compiler must have a reference to that assembly. This must be a single,unambiguous reference that does not cause circular references among projects.
据我所知,我没有任何循环引用,所以其他问题可能导致此错误消息和/或我如何防止这种浪费我的时间太多,我点击更新服务参考,并希望这次它将工作?
请注意,我无法选择此架构,它是由我们的软件架构师强加的.
环境是带有Visual Studio 2012的Windows 8.
解决方法
在为程序员创建wcf服务(第一次)时,这是很常见的.在您的情况下,解决方案是确保通过WCF通过线路发送的任何对象(类,datacontract类等)应与wcf接口文件位于同一个程序集中.换句话说,如果您的WCF服务函数调用或子例程接受或返回一个对象,该对象应该在同一个程序集中(或者在未在服务下游引用的程序集中).
如果将它们拆分,则创建循环引用而不会意识到它,因为WCF会自动自动创建服务器端数据合同的客户端版本.你可能能够关闭这种行为,但我不知道具体如何,我建议谷歌搜索.如果这些服务器端数据协定文件实际上在公共类中,则presto您有一个循环引用,因为您的业务层具有这些文件的代码生成版本以及对公共程序集的引用.
有关此内容的详细信息,请深入研究服务引用中生成的代码.要执行此操作,您需要打开visual studio解决方案资源管理器中的查看所有文件功能,然后开始深入研究在创建该服务引用时为您生成的代码.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。