代码之家  ›  专栏  ›  技术社区  ›  gbjbaanb

引用相同数据协定的多个WCF服务

  •  19
  • gbjbaanb  · 技术社区  · 6 年前

    我的数据协定位于一个单独的程序集中,如果客户使用.Net,我可以提供给他们。他们可以告诉自己的服务引用重用引用程序集中的类型。但是,如果它们不使用.net,并且它们使用两个都使用同一实体的服务,那么我假设它们将得到一个不明确的引用消息。如果不引用数据协定dll,我可以在visualstudio中看到这一点。

    我的问题是,我可以在我的服务中做些什么,或者他们可以在客户端应用程序中做些什么,以避免必须确认数据合同来自哪个代理?

    6 回复  |  直到 9 年前
        2
  •  2
  •   Gareth    15 年前

    我还倾向于将所有数据契约保存在一个程序集中,该程序集由多个服务和多个客户端应用程序引用,这非常有效,但我从未尝试在.NET之外使用该服务。

    了解他们使用什么技术来使用.NET以外的服务可能会有所帮助?是什么在抛出模棱两可的参考信息?

        3
  •  0
  •   user272671    15 年前

    我碰巧有多个服务在我的端共享对象。我不知道你为什么会有这个问题。在我的情况下,我可以通过这种方式访问对象。

    client.CommonLibrary.Address。

    SERVICE2 client2=新SERVICE2()

    client2.CommonLibrary.Address。

        4
  •  0
  •   arinte    8 年前

    这取决于他们在客户端使用的工具。例如,对于Axis2 For Java,wsdl2java工具可以使用-u开关共享类型。

    how can I share proxy objects across multiple Axis2 web service clients?

        5
  •  0
  •   Fadrian Sudaman    15 年前

    我认为一个更好的方法是重构您的数据契约,这样您就可以将跨多个服务的所有公共服务放在一个程序集中并引用它们,因此无论客户端应用程序使用了多少服务,您都不会遇到这种含糊不清或冲突的问题。

        6
  •  0
  •   Tobias    13 年前

    我们不是通过visualstudio助手生成服务代理,而是通过调用slsvcutil.exe的自定义批处理文件(正如我们使用Silverlight一样)。在这里,可以使用/n参数指定命名空间映射,如下所示:

    "C:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\tools\slsvcutil.exe "^
     http://ServiceUrl/MyService.svc^
     **/n:http://youruri.org/CustomerService/DataContracts,CLR.Namespace.CustomerService^**
     /n:*,CLR.Namepsace.MyService^
     /r:"%ProgramFilesFolder%\Reference Assemblies\Microsoft\Framework\Silverlight\v5.0\System.Windows.dll"^
     /ct:System.Collections.ObjectModel.ObservableCollection`1^
     /edb^
    

    所以所有的数据契约都有名称空间 http://youruri.org/CustomerService/DataContracts 在代理文件中生成clr命名空间clr.namespace.CustomerService,依此类推。如果您已经在同一个代理程序集中提前生成了这个代理,那么您可以从第二个文件中删除整个名称空间,一切都正常工作—我们为最后一步编写了一个小工具。所有其他约定名称空间都将生成到CLR.Namepsace.MyService namspace(请参阅星号表示catch All)

    这个过程需要设置,因为您必须手工创建批处理文件,但一旦完成,就可以很好地工作。