加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

vb.net – 混合服务和项目参考

发布时间:2020-12-17 07:27:11 所属栏目:百科 来源:网络整理
导读:我有一个有三层的解决方案:常见,数据和业务 公共图层定义了其他图层引用和使用的对象.数据层包含数据访问代码,业务层包含业务逻辑.每个图层包含多个项目. 数据和业务层公开WCF服务,该服务将公共层中的对象作为参数.数据层和业务层都通过项目引用直接引用公
我有一个有三层的解决方案:常见,数据和业务

公共图层定义了其他图层引用和使用的对象.数据层包含数据访问代码,业务层包含业务逻辑.每个图层包含多个项目.

数据和业务层公开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服务(第一次)时,这是很常见的.在您的情况下,解决方案是确保通过WCF通过线路发送的任何对象(类,datacontract类等)应与wcf接口文件位于同一个程序集中.换句话说,如果您的WCF服务函数调用或子例程接受或返回一个对象,该对象应该在同一个程序集中(或者在未在服务下游引用的程序集中).

如果将它们拆分,则创建循环引用而不会意识到它,因为WCF会自动自动创建服务器端数据合同的客户端版本.你可能能够关闭这种行为,但我不知道具体如何,我建议谷歌搜索.如果这些服务器端数据协定文件实际上在公共类中,则presto您有一个循环引用,因为您的业务层具有这些文件的代码生成版本以及对公共程序集的引用.

有关此内容的详细信息,请深入研究服务引用中生成的代码.要执行此操作,您需要打开visual studio解决方案资源管理器中的查看所有文件功能,然后开始深入研究在创建该服务引用时为您生成的代码.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读