从2个Web服务制作复杂类型的一个副本

时间:2009-12-03 17:46:27

标签: c# web-services types proxy

在C#(其他.Net OOP语言)中,我有2个web服务。 Svc1返回一个复杂的数据类型,它成为svc2的参数。请注意,它是相同的复杂类型。

现在,我创建了这两个webservices的2个代理类。这意味着同一类型会生成两次。

如何确保在2个代理中只有该类型的一个副本?您可以假设2个webservices的相同或不同的名称空间。

2 个答案:

答案 0 :(得分:1)

同时生成两个代理:

svcutil http://example.com/svc1?wsdl http://example.com/svc2?wsdl

如果两个服务中的类型实际上相同(名称和名称空间),它将只为客户端生成一个代理类。

另一种可能性是为第一个服务生成代理类:

svcutil http://example.com/svc1?wsdl

将生成的.cs文件编译为一个程序集,例如MyAssembly.dll,并在导入第二个服务时使用/reference选项:

svcutil /reference:MyAssembly.dll http://example.com/svc2?wsdl

这将在WSDL和提供的程序集中查找相同的类型。

答案 1 :(得分:0)

我最近遇到过类似的问题;我没有尝试达林的建议。

IDesign的Miguel Castro在2009年3月的DevConnections上发表了关于“WCF手动方式......正确方法”的精彩演讲。他展示了如何重用服务合同和代理。从我的笔记:

  • 一个服务/数据合同的装配
    • 客户与客户之间共享服务器
  • 一个服务组合
    • 允许更改主机并重新使用
  • 代理的一个程序集
    • 在客户中重复使用
  • 单独申请托管
  • 请勿使用“添加服务参考”
  • 服务(POCO)项目引用合同(接口)项目和System.ServiceModel
  • 客户端代理程序集引用合同程序集但服务项目
  • 客户端应用程序实例化代理

我们公司还没有转向WCF,但这看起来像是要走的路(对我来说)。

编辑:我在此找到了article by Mr. Castro