WCF和多个名称空间的问题 - 跨多个服务引用共享对象类型

时间:2010-01-10 13:54:04

标签: wcf silverlight types namespaces sharing

我有两个网络服务。一个具有用户功能,一个具有管理功能。

两种服务都可以有效地使用相同的对象类型,例如:

  • AdminService提供删除/修改Customer对象的功能
  • UserService提供列出/阅读客户对象的功能

现在在客户端我有两个服务引用,Webservices.Admin和Webservices.User。

如果我使用UserService检索Customer对象,我无法通过AdminService操作它们,因为UserService检索Webservices.User.Customer类型的对象,但是AdminService使用Webservices.Admin.Customer类型的对象。

在服务器端,两种类型都相同,只属于客户端中的不同命名空间。

现在的问题是:如何在不同的服务引用之间共享类型?

4 个答案:

答案 0 :(得分:2)

结帐http://cgeers.com/2011/07/31/wcf-sharing-types-using-svcmap/ 通过调整Reference.svcmap文件,您可以确保只为不同服务引用使用的每个DataContract生成一个类。

注意:在按“更新服务参考”

之前,请记住删除节点的内容

答案 1 :(得分:1)

如果您正在控制通信的两端,并且两端都只是.NET,那么您可以这样做:

  • 将您的所有合同(包括您的数据合同)纳入单独的“合同”程序集
  • 在服务器端实现代码中引用该程序集,以及客户端代码

如果这样做,在添加服务引用时,WCF将查找并使用该共享程序集,而不是为权限创建新类型。在你的情况下,你只有一种类型Contracts.Customer或者你正在处理的任何类型。

如果你控制电线的两端并且两端都有.NET,那么这只能 。但在这种情况下,这是在服务器和任意数量的客户端之间共享合同(尤其是数据合同)的好方法。

答案 2 :(得分:1)

使用slsvcutil在clientside上创建WCF代理(假设clientside是.net应用程序),引用包含对象的DLL,它将用于在DLL中传递相同对象的所有端点

从开始 - >打开Visual Studio命令提示符。 Visual Studio 2008 - >工具 - >可视命令提示符

转到与

类似的目录
  

C:\ Program Files \ Microsoft SDKs \ Silverlight \ v3.0 \ Tools

输入slsvcutil并按照语法

slsvcutil http://somewcfservice:8080 /r:CommonLibrary.dll

其中CommonLibrary.dll是包含业务对象的dll

[edit]修复了项目是一个Silverlight项目的事实

答案 3 :(得分:0)

有一种简单的方法可以在客户端和服务之间共享类型,只需在添加服务引用之前向客户端添加对共享类型程序集的引用。

您可以在那里找到详细的方案和示例项目:

http://blog.walteralmeida.com/2010/08/wcf-tips-and-tricks-share-types-between-server-and-client.html