跨 WCF 服务共享对象

Posted

技术标签:

【中文标题】跨 WCF 服务共享对象【英文标题】:Sharing Objects across WCF Services 【发布时间】:2010-08-16 17:43:02 【问题描述】:

我遇到了与此问题类似的问题: Problem with WCF and Multiple Namespaces

我的主要区别是我不控制电线的两端。我的设置与此类似:

我的对象 我的登录服务 我的.Service1 我的.Service2

您要做的第一件事是通过登录服务登录并收到安全票。票证对象位于 My.Objects 命名空间中。对于 My.Service1 和 My.Service2 中的每个后续调用,您必须传入安全票证以对调用进行身份验证。我遇到的问题是,引用解析为 My.LoginService.Ticket,My.Service1.Ticket,而不是客户端(现在是一个 .net,但将来是 Java 和其他)和 My.Service2.Ticket。当客户端尝试将登录期间检索到的对象传递给任何其他函数时,它会收到对象不匹配错误。

如何让每个服务将对象解析到 My.Objects 命名空间?

【问题讨论】:

【参考方案1】:

看看NetDataContractSerializer,可能就是您要找的。它与 DataContractSerializer 的不同之处在于它在序列化的 XML 中包含 CLR 类型信息,这允许您共享您的类型,但会强制线路的两端使用相同的类型。

看看我整理的一篇博文和一个属性(来自我偶然发现的另一个博客),以将其注入需要使用它的操作:

http://theburningmonk.com/2010/08/wcf-using-the-netdatacontractserializer-to-share-your-type/

【讨论】:

我刚刚将所有内容添加到具有单独端点的同一个服务中,这解决了我的问题。调查您的解决方案,它似乎可以工作,但您需要控制两端,而我没有。【参考方案2】:

创建一个引用具有票证类型的服务之一的程序集,然后从您的主项目中引用此程序集。

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

以上是关于跨 WCF 服务共享对象的主要内容,如果未能解决你的问题,请参考以下文章

如何为自托管 WCF 服务启用跨域调用

跨 WCF Web 服务请求序列化通用 XML 数据

使用跨域 WCF 服务时,OPTIONS 方法被拒绝

经过身份验证的服务不支持跨域 javascript 回调。通过 SSL 代理对 WCF 服务的 AJAX 查询

在 Web 场环境中使用共享缓存来检测 WCF 中的重放攻击

关于vue项目请求WCF服务跨域的问题(后台设置)