2009-12-03 104 views
2

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

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

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

回答

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和提供的程序集中查找相同的类型。

+0

整齐。将尝试这两种方法。感谢Darin。 – 2009-12-03 18:09:09

+0

好奇虽然..万一web服务是在不同的命名空间,什么是最好的方法来实现相同? – 2009-12-03 18:13:50

+0

如果不同的名称空间不能达到相同的效果。您需要手动绕制生成的代理。 – 2009-12-03 18:16:55

0

我最近碰到类似的问题;我没有尝试Darin的建议。

Miguel Castro的IDesign在2009年3月的DevConnections上展示了“WCF手动方式......正确的方式”。在那里他展示了如何重用服务合同和代理。从我的笔记:

  • 一个用于服务组件/数据契约
    • 共享客户端&服务器之间
  • 一个组件,用于服务
    • 允许更改主机和重用
  • 一个组件,用于代理 客户之间
    • 重用
  • 独立应用程序托管
  • 不要使用“添加服务引用”
  • 服务(POCO)项目引用的合同(接口)项目和系统。ServiceModel
  • 客户端代理组件的参考合同组装,但服务项目
  • 客户端应用程序实例化代理

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

编辑:我在这发现了一个article by Mr. Castro

相关问题