【问题标题】:Why won't VS2010 RC use my existing types when I add a service reference?为什么 VS2010 RC 在我添加服务引用时不使用我现有的类型?
【发布时间】:2011-01-19 17:09:14
【问题描述】:

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

【问题讨论】:

  • 我可以补充一点,我可以通过使用 svcutil.exe 手动生成服务引用并在 /reference 参数中指向我的数据合同 dll 来使用现有类型。但我仍然不明白为什么它在 Visual Studio 中不起作用!
  • 如果它适用于您的简单案例,则继续复杂化,直到它失败,或者直到它与您的实际应用相匹配。
  • 我是这么想的,但我的实际应用程序由 14 个项目、数百个类和数十个服务引用组成,大约有 30 个 datacontract-classes。所以“直到它与你的实际应用相匹配”需要一段时间。我希望其他人有这个问题,或者至少知道类型重用失败的原因。

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


【解决方案1】:

过去我在使用 VS 2008 时遇到过这个问题。虽然我无法找到它不从同一个程序集中获取类型的原因,但您正在向其中添加服务引用,但我确实注意到,如果您实际取出 DataContracts,它会起作用。就像将它们放在一个单独的 dll 中,然后将该 dll 引用到您要添加服务引用的项目中。在大多数情况下,这是一个更优雅的解决方案,因为人们倾向于在服务和服务使用者之间共享 DataContract。

【讨论】:

    【解决方案2】:

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

    我没有检查,但默认值可能已更改,这可以解释您的问题。

    【讨论】:

    • 我相信这是在“高级”选项卡上。
    • 不,已检查。相反,该复选框是我是否要重用所有引用程序集中的类型,或者只重用我特别选择的那些。无论哪种方式,它都不起作用。
    猜你喜欢
    • 2011-05-10
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2011-09-13
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    • 2011-06-06
    相关资源
    最近更新 更多