我有两个网络服务。一个具有用户功能,一个具有管理功能。
两种服务都可以有效地使用相同的对象类型,例如:
现在在客户端我有两个服务引用,Webservices.Admin和Webservices.User。
如果我使用UserService检索Customer对象,我无法通过AdminService操作它们,因为UserService检索Webservices.User.Customer类型的对象,但是AdminService使用Webservices.Admin.Customer类型的对象。
在服务器端,两种类型都相同,只属于客户端中的不同命名空间。
现在的问题是:如何在不同的服务引用之间共享类型?
答案 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