繁体   English   中英

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

[英]Problem with WCF and multiple namespaces - sharing object types across multiple service references

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

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

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

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

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

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

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

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

注意:在按“更新服务参考”之前,请记住删除节点的内容

如果你控制通信的两端,并且两端都只是.NET,你可以这样做:

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

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

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

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

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

goto目录类似于

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

键入slsvcutil并按照语法

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

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

[编辑]修复了该项目是一个Silverlight项目的事实

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM