我在 VS2010 RC 中获取服务引用以使用现有程序集时遇到了很大的问题。
即使我有一个类库,其中包含在服务项目和使用项目(这是一个类库)之间共享的所有数据协定(用 DataContract 标记的类和用 DataMember 标记的属性),当我添加服务引用时,数据合同是使用服务引用重新生成的,而不是使用现有类型。
当我使用 VS2010 beta 2 时,这工作得很好,并且我有使用完全相同的数据契约的现有服务引用。但是,如果我添加新的服务引用,甚至更新旧的服务引用,它将不再使用现有的类型。
我制作了一个小型测试解决方案,其中包含一项服务、一种数据合约类型和一个作为消费者的控制台应用程序(全部在同一个解决方案中),它似乎可以工作,但这对我来说并不是很大的安慰。有什么办法可以看出为什么它不能使用现有类型吗?
编辑以澄清。它使用 svcutil.exe 生成代理类,并指向数据契约 dll,如下所示:
svcutil.exe http://localhost/MyService.svc
/reference:[Path To DataContracts]\DataContracts.dll
/n:*,MyProject.MyServiceReference /ct:System.Collections.Generic.List`1
问题是,即使选中了“重用”复选框并且引用了数据契约程序集,Visual Studio 可能会出于什么原因生成自己的数据契约而不是使用现有的数据契约。
我过去在使用 VS 2008 时也遇到过这个问题。虽然我无法找到它不从您添加服务引用的同一程序集中获取类型的原因,但我确实注意到,如果您实际上取出 DataContracts,它就会起作用。就像将它们放在一个单独的 dll 中,然后将该 dll 引用到要添加服务引用的项目中。在大多数情况下,无论如何,这是一个更优雅的解决方案,因为人们倾向于在服务和服务使用者之间共享数据契约。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)