当我添加服务引用时,为什么VS2010 RC不会使用我现有的类型?

时间:2010-02-22 16:19:10

标签: wcf web-services visual-studio-2010

我在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也可能有什么原因可以生成自己的数据集而不是使用现有的数据集。

2 个答案:

答案 0 :(得分:1)

我过去曾遇到过VS 2008这个问题。虽然我无法找到它没有从同一个程序集中拾取类型的原因,但是你添加了服务引用我注意到它确实可以正常运行DataContracts。如将它们放在一个单独的dll中,然后将该dll引用到您要添加服务引用的项目中。在大多数情况下,这是一个更优雅的解决方案,因为人们倾向于在服务和服务使用者之间共享DataContracts。

答案 1 :(得分:0)

添加服务引用时,会出现一个复选框,指示您是要生成数据合同还是使用现有类型。

我没有检查过,但默认情况可能已经改变,这可以解释你的问题。