【问题标题】:using protobuf-net with WCF client and a java server将 protobuf-net 与 WCF 客户端和 java 服务器一起使用
【发布时间】:2011-05-18 04:27:36
【问题描述】:

我们希望使用“协议缓冲区”在 .net 客户端和 java 服务器之间进行通信。

理想情况下希望通过 WCF 使用 protobuf-net,因为我们与其他服务的所有其余通信都通过 WCF 堆栈。

我有一个概念证明 .net WCF 客户端使用 protobuf-net 端点行为与 .net WCF 服务器对话,这似乎工作正常。

我的问题是我们将如何配置 java 服务器以将 proto-buf 发送到我们的 WCF 客户端? IE。我们是否需要将 java 服务器作为 SOAP 服务公开给 WCF 并通过它发送 proto-buf?

【问题讨论】:

    标签: java .net interop protobuf-net


    【解决方案1】:

    如果您的 WCF 客户端使用的是 protobuf-net 端点,那么它不使用 SOAP 是吗?我不能说我个人使用过 protobut-net,但我知道它是 SOAP 的一种替代方法。基本上,看看它使用的协议并实现与 servlet 相同的协议。老实说,我希望这相当简单。

    如果它有效并且您可以将 servlet 作为开源贡献,我怀疑您不是唯一愿意这样做的人 :)

    【讨论】:

    • 认为端点被公开为 SOAP 端点,protobuf-net 添加了 WCF 端点行为,该行为将肥皂消息体编码/解码到 Base64 和从 Base64 解码。我猜我需要在 Java 端模仿这种行为
    • @Edward:如果它真的正在这样做,那在 Java 端可能很容易——你只需要使用一个接受字节数组并返回一个字节数组。我建议您首先使用 Wireshark 或 Fiddler 来验证这一点。
    【解决方案2】:

    在这种情况下,我强烈建议使用 regular SOAP 作为协议,并公开 byte[]Stream(或任何有效的)作为有效负载 - 然后处理编码你的申请。

    WCF 中的序列化程序挂钩意味着它很大程度上类似于byte[] 有效负载(基于每个参数/结果),但我不能保证它会被轻松解构WCF 之外。

    此外...如果您将其描述为包含 BLOB 的 SOAP 消息,那么您对 ​​SOAP 是真实的。

    【讨论】:

    • 感谢您的帮助。我们真的非常想保留 WCF 堆栈,因此将尝试按照 Jon 的建议重建有效负载,如果不能,则回退到常规 SOAP。无论哪种方式都会发布我们的发现。
    • @Edward - 它仍然是 WCF - 它只是在 WSDL 中没有强类型定义(只是 byte[]
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-22
    • 2018-03-14
    相关资源
    最近更新 更多