5

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

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

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

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

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

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

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

4

4 回答 4

2

查看https://github.com/geersch/WcfSvcMap 通过调整 Reference.svcmap 文件,您可以确保为不同服务引用使用的每个 DataContract 只生成一个类。

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

于 2011-09-27T07:39:00.120 回答
1

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

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

转到类似于的目录

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

输入 slsvcutil 并遵循语法

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

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

[编辑] 修复了项目是 silverlight 项目的事实

于 2010-01-10T15:36:34.663 回答
1

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

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

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

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

于 2010-01-10T15:11:50.423 回答
0

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

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

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

于 2010-08-19T08:37:48.387 回答