我有一个独特的问题,我希望能够处理包含任意二进制数据的传入 HTTP POST 请求。
我目前可以使用标准的 ASP.NET 页面处理程序或在 ASP Web 服务中处理这些数据,但我想知道是否可以在 WCF 服务中处理传入的二进制数据?我可以深入到 WCF 处理堆栈以绕过 SOAP 处理并在我自己的代码中处理原始消息吗?
我知道这违反了 WCF 的“合同”发布(无论是 WSDL),但我并不真正关心这一点。
-杰夫
您可以使用流式MSDN
考虑使用 MTOM。MTOM 是一种将带有 SOAP 消息的大型二进制附件作为原始字节传输的机制,允许使用更小的消息。详情见:
只要我知道你可以配置服务绑定: http ://www.c-sharpcorner.com/UploadFile/pjthesedays/bindwcf05032009012251AM/bindwcf.aspx
使用 netTcpBinding
在这个问题上花了几个星期之后,我有了一个明确的答案:
你能用 WCF 的自定义二进制序列化替换 XML/SOAP 吗?
简短的回答:没有
长答案:是的,但是您必须重写几乎所有的传输层接口,因此您不妨创建一个自定义 IHttpHandler 并一起避免 WCF。
微软试图遵循 SOAP 标准(我认为该标准是造成这个问题的原因)打破了简单的编程规则之一 -> 层中的职责分离。WCF/SOAP 可能看起来是一个优雅的分层协议和传输,但实际情况是,层之间存在错综复杂的连接。这意味着 WCF 是一个极其复杂的通信协议,它提供了传输、安全性、可靠性、发布、序列化和其他在某种程度上都相互依赖的特性。如果您只需要一个传输通道,那么 WCF/SOAP 会增加大量的复杂性。
我确信我可以开始对 SOAP 是/否大肆咆哮,但我终于意识到 WCF/SOAP 不是我的应用程序所需要的。
-杰夫