【问题标题】:Have Visual Studio share a namespace with multiple service references让 Visual Studio 与多个服务引用共享一个命名空间
【发布时间】:2024-04-30 17:20:02
【问题描述】:

除了手动编码 Reference.cs 文件之外,还有什么方法可以让 Visual Studio 允许多个服务引用共享一个命名空间?

我正在开发一个客户端应用程序,该应用程序利用属于同一解决方案的多个服务。类似于 Microsoft 为 MS-Project Server 提供的项目服务接口 (PSI) API。而不是为每个单独的服务引用使用不同的命名空间,例如:

MyProject.ProjectService.ProjectServiceClient
MyProject.ResourceService.ResourceServiceClient
MyProject.TimesheetService.TimesheetServiceClient

如果我们可以将它们全部放入一个命名空间中,那就太好了,例如:

MyProject.Services.ProjectServiceClient
MyProject.Services.ResourceServiceClient
MyProject.Services.TimesheetServiceClient

随之而来的是共享通用代码的能力。例如,如果这些服务中的任何一个暴露了相同的数据合同。现在,如果我想编写我的客户可以使用的代码,我必须为每个服务代理创建一个单独的版本,因为通用合同存在于三个不同的命名空间中。看看我要去哪里?

有可能吗?

更新

假设我无权访问服务代码(因为我没有),这意味着共享类库不是一个选项。在这种情况下我的选择是什么?

【问题讨论】:

  • Visual Studio 的哪个版本?您使用的是服务引用还是 Web 引用?
  • 我正在使用 Visual Studio 2010 并添加服务参考。 (使用 PSI 仅作为示例。)

标签: .net wcf service-reference


【解决方案1】:

您可以将这些公共类放入一个由服务和客户端共享的类库中。然后,Visual Studio 不会为每个服务引用生成类,而是使用公共类库。

【讨论】:

  • 是的,我意识到这一点。我只是希望有一种方法可以让它更干净一些——或者更好的说法是:自动的。
  • 如果您同时控制服务的服务器端和客户端,这是一项很棒的技术并且有很多好处。我认为我最喜欢这种技术的特点是,您不再需要维护那些愚蠢的服务引用目录和 Reference.cs 文件,egads,这些简直是痛苦的。
  • @Chris:您仍然有 Reference.cs 文件,只是其中的内容较少。
  • @John Saunders,我会加倍努力,制作您自己的 Reference.cs 文件。这样,当您快乐的开发团队中的其他人更改合同并忘记更新所有客户端引用时,您可能会遇到编译时错误(这比在运行时发现损坏的合同更改更可取;-)
  • @Chris:如果可能的话,我会使用自动化的构建后功能测试,以便在夜间构建期间发现问题。需要一些基础设施,但非常值得。
最近更新 更多