【问题标题】:is there a way to automatically update proxy object when updating service on WCF?在 WCF 上更新服务时,有没有办法自动更新代理对象?
【发布时间】:2014-07-24 20:56:24
【问题描述】:


我有一个正在开发的 WCF Web 服务。目前,每次我在服务器端更改服务中的合同时,我都需要更新服务引用并使用“svcutil.exe”重新生成客户端使用的代理对象。无论如何都可以自动执行吗?我曾经看到有人在reference.cs 文件中生成了客户端,但我不知道他是怎么做到的。我正在使用 Visual Studio 2010。

到目前为止,我发现的是不同的msdn references 告诉我使用 svcutil。它不直观,通常在使用 VS 时我可以找到比 cmd 更简单的解决方案。

【问题讨论】:

  • 为什么同时使用 svcutil 和服务引用?
  • 我使用引用在我的app.config中指定端点配置,否则不起作用。如果有办法避免这种情况,我会非常乐意去看看
  • 你为什么使用svcutil? “添加服务引用”应该生成代理和配置文件更改。除此之外,您不需要使用 svcutil。
  • 唉,它没有。它给了我一个不包含我所有操作合同的参考对象
  • 您使用了一些奇怪的术语。 svcutil 生成的内容与服务引用生成的内容基本相同。特别是,svcutil 还可以更新配置文件。请参阅svcutil.exe/config/mergeConfig 开关。

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


【解决方案1】:

如果您想自动化您的开发工作,请学习命令行和 svcutil.exe。

您应该使用 svctuil.exe 来生成 wsdl 和代理类,它们会进入一个名为“MyService.ClientApi”之类的项目中。为方便起见,在服务项目的构建事件中使用了要调用的批处理文件。

更多详情请阅读http://www.codeproject.com/Articles/627240/WCF-for-the-Real-World-Not-Hello-World

阅读这篇 CodeProject 文章后,您应该能够创建相应的批处理文件,并在构建事件中调用它们。

您会看到将合同和实施分成 2 个项目的美妙之处。

说,你会有

  • MyServiceContracts.csproj 和 CreateWsdl.bat 在构建后事件中被调用
  • MyServiceImp.csproj
  • MyServiceClientApi.csproj 和 CreateProxy.bat

您可以让 CreateWsdl.bat 调用 CreateProxy.bat。因此,每次您对合约进行更改时,您都会发布新的 Wsdl/XSD 文件,并有新的 MyServiceClientApi.dll 供所有客户端程序使用。

【讨论】:

  • 这是一个好主意,自从我 12 岁开始使用 dos 6 后,我就没有使用过批处理文件。+1。非常感谢您。我不会接受它作为答案,因为它仍然需要使用命令行,而且感觉不微软。我的团队成员可能很难记住(到目前为止,我们只有一个 wcf 模块)。显然我的问题是更新参考过程的错误,我会在下周了解更多。
  • 如果您从 12 年起就没有使用过 .bat 文件,我会继续努力。将 PowerShell 用于相同的功能。好多了。
【解决方案2】:

您可以在 Visual Studio 项目中右键单击“服务引用”并选择“更新服务引用”。这将更新您的代理类和配置文件。

【讨论】:

  • 好吧,它不会因为某种原因更新它。我只能访问数据合同,不能访问操作合同。正如上面的 cmets 中提到的,唯一真正起作用的是 svcutil。
【解决方案3】:

如果您愿意放弃使用自动生成,您可以手动构建您的服务合同类(继续并使用 reference.cs 作为起点),然后构建为可以在客户端之间共享的单独程序集和服务器。以后任何更改的传播都将根据您的需要在重新构建合同程序集时自动发生。

【讨论】:

    【解决方案4】:

    解决了。显然我不得不取消选中引用程序集中的重用类型复选框,并且 svcutil 生成的文件和 reference.cs 文件之间没有更多区别。我想责怪微软,但这确实有道理。该死。非常感谢大家

    【讨论】:

      猜你喜欢
      • 2013-06-06
      • 1970-01-01
      • 2012-10-16
      • 2020-12-11
      • 2019-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多