WCF Rest 服务和 protobuf-net

Posted

技术标签:

【中文标题】WCF Rest 服务和 protobuf-net【英文标题】:WCF Rest service and protobuf-net 【发布时间】:2020-11-16 02:01:30 【问题描述】:

我点击了这个链接。

[https://www.drdobbs.com/windows/working-with-protobuf-wcf-services/240159282][1]

这个链接基本上展示了如何使用 protobuf-net 和 WCF 服务进行序列化。我的要求是使用带有 WebGet 和 WebInvoke 选项的 WCF 休息。它不适用于此,我总是在客户端以 xml 序列化而不是 protobuf 获取数据。然后我去了这里和其他声称 WCF + Protobuf 工作但没有 WCF 休息的网站上的无数链接。

有关于为 protobuf 开发自己的 mediaformator 的信息,但该界面处于 WCF 预览版 (2011) 中,并且从未进入我正在使用的 .net 4.6。

我是否在这里遗漏了一些明显的东西,或者 protobuf 根本不适用于 WCF 休息?

谢谢 周杰伦

【问题讨论】:

【参考方案1】:

(就直接在 protobuf-net 库中的内容而言)

我没有专门针对 WCF REST。在序列化级别它应该可以正常工作,但我不知道将它挂接到那里的任何特定框架/实现中需要什么。这不是我想要的场景。

目前,gRPC 似乎比 WCF 更受欢迎,因此我们提供了完整的 gRPC 支持。

如果我可以做些什么来启用 WCF REST,那很好 - 但这不是我研究过的主题。

【讨论】:

是的,马克。事实上,我已经完成了您对类似问题的回答之一,您在该问题上建议使用 MVC 库使用这种 mediaformator 方法。但正如我发现的那样,它从未进入 WCF。我看到 Protobuf-net 为 WCF 提供了行为扩展,我可以在 WCF 端点配置中使用它。只是我看不到它对休息操作的影响。不幸的是,我受制于仅使用 WCF rest 而不是像 mvc core 或 gRPC 这样的新堆栈的现有限制。【参考方案2】:

因此,根据WCF protobuf endpoint 400 bad request 此处的答案,我可以使 Protobuf-net 工作,但使用单独的端点。它还存在与 uri 参数模板有关的问题。而且这种方式也无法进行内容协商,因为我无法根据客户端的接受标头更改响应类型。之后,我查看了https://github.com/protobuf-net/protobuf-net/blob/main/src/protobuf-net/ServiceModel/ProtoEndpointBehavior.cs,可以看到它还将默认数据合同序列化程序与原型序列化程序交换。看起来多个序列化程序不能存在于同一个端点上以这种方式进行内容协商。

【讨论】:

以上是关于WCF Rest 服务和 protobuf-net的主要内容,如果未能解决你的问题,请参考以下文章

带有 Protobuf-net 的端点行为配置 WCF

对 protobuf-net WCF 的使用感到困惑

将WCF迁移到gRPC

protobuf-net 和 wcf web api

Protobuf-net.Grpc 服务契约继承

将 WCF SOAP 和 WCF REST 服务托管为 Azure 应用服务