【问题标题】:Portable / Interoperable WCF Contracts可移植/可互操作的 WCF 合同
【发布时间】:2010-10-03 21:21:06
【问题描述】:

我想知道是否有人在设计 WCF 合同时有一些好的提示/注意事项,并考虑到 Web 服务互操作性,无论是在旧的 Microsoft Web 服务技术(例如 WSE)和非 Microsoft 方面Java 调用 WCF Web 服务等技术。

例如:在将 DateTime 公开为合同中的类型时,是否需要考虑任何特殊规则?字典和哈希表怎么样?使用各种可用的绑定可能会遇到什么问题?

【问题讨论】:

    标签: .net wcf interop datacontract contract


    【解决方案1】:

    WCF 日期时间问题

    关于您的 DateTime 问题,您担心通过 WCF 传递 DateTime 是正确的。这只是许多抱怨困难的环节之一...... http://daveonsoftware.blogspot.com/2008/07/wcf-datetime-field-adjusted.html

    关于类型等价

    根据 Juval Lowy 的《Programming WCF Services, 2nd Edition》一书中的第 3.1.3 节...

    WCF 为 原始类型,因为有 模式的行业标准 这些类型。

    他还指出了关于使用自定义类型作为 Operation Contract 方法的参数的问题。我认为这也适用于方法返回类型。

    为了能够使用自定义类型作为 操作参数,有两个 要求:首先,类型必须是 可序列化的,其次,这两个 客户端和服务需要有一个 该类型的本地定义 产生相同的数据架构。

    您可能还想查看第 F.4 节。 Data Contracts,这是他的 WCF 编码标准的一部分。 Bullet #9 适用于您的问题...

    不要传递 .NET 特定的类型,例如 作为类型,作为操作参数。

    绑定建立期望

    基于 WSHttpBindingBase 的绑定(在 Reflector.NET 中搜索它的四个派生)将是最具互操作性的,因为它们是为互操作性而设计的。

    图书推荐

    我强烈推荐 Juval 的书:http://www.bookpool.com/sm/0596521308

    【讨论】:

      【解决方案2】:

      因此,如果您想与非 microsoft 服务互操作,您可能希望避开任何非原始类型。 WCF 使用序列化对传输数据进行编码,例如 Java 将无法反序列化哈希表。然而,WCF 是建立在 SOAP 之上的,因此通过一些工作,您应该能够让任何 SOAP 功能在 JAVA 客户端和 WCF 服务之间工作,反之亦然。

      只要记住编写原语合约就可以了。

      【讨论】:

        猜你喜欢
        • 2013-10-24
        • 2010-11-10
        • 2010-10-16
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 2022-08-19
        • 2011-06-06
        • 1970-01-01
        相关资源
        最近更新 更多