我可以在不设置内容类型的情况下调用 WCF 服务吗?

Posted

技术标签:

【中文标题】我可以在不设置内容类型的情况下调用 WCF 服务吗?【英文标题】:Can I call a WCF service without setting content-type? 【发布时间】:2011-08-28 14:54:05 【问题描述】:

我正在尝试使用 webHttpBinding 将旧的 REST/plain 旧 xml Web 服务替换为 WCF 服务。它必须与现有客户端向后兼容 - 目前不在请求中发送内容类型标头。

当我将客户指向我的新 Web 服务时,我收到 HTTP ERROR 415 - missing content type。

是否可以配置 WCF,使其接受没有内容类型标头的原始请求?

【问题讨论】:

【参考方案1】:

415 不是“缺少内容类型”,它是415 Unsupported Media Type。这表明服务器正在接收内容类型,它只是不知道如何处理它。根据 HTTP 规范,证明内容类型是应该的。不是必须的,所以 WCF 应该接受没有内容类型的请求。如果没有,也许您想考虑使用较新的 WCF Web API,因为它们确实遵循 HTTP 规范并允许您传递没有内容类型标头的内容。


更新:

显然这是 .Net 框架早期版本中的一个错误,并且有一个解决方法/修复 https://connect.microsoft.com/wcf/feedback/details/475964/content-type-header-validated-at-the-transport-level-instead-of-the-application-level-and-trows-a-415-exception

【讨论】:

我已经尝试了上面文章中的解决方案,但是它只解决了 WCF 错误地处理 POST 上的内容类型的情况。如果没有内容类型标头,则无法解决问题。 您使用的是 .Net 4 还是 3.5? 3.5 - 此错误已在 .net 4.0 中修复。 connect.microsoft.com/wcf/feedback/details/475964/… 这张海报显然通过编写自定义 HttpTransportChannel 和 HttpListener 解决了这个问题,但这似乎需要付出很多努力来解决看似简单的问题。【参考方案2】:

在 .net 3.5 下,答案是否定的。似乎内容类型在传输层而不是应用程序层被错误地验证。解决此问题的唯一方法是使用带有自定义 HtppTransportChannel 的自定义绑定。

此错误已在 .net 4.0 中修复

【讨论】:

以上是关于我可以在不设置内容类型的情况下调用 WCF 服务吗?的主要内容,如果未能解决你的问题,请参考以下文章

我可以在不显式调用 headObject 的情况下从 S3 对象流中获取 Content-Type 吗?

WCF反序列化如何在不调用构造函数的情况下实例化对象?

是否可以在不添加服务参考的情况下访问 WCF 服务?

是否可以在没有 SDK 的情况下调用 Dynamics CRM 2011 后期绑定 WCF 组织服务 - 直接自定义绑定?

我可以在不使用 javascript 的情况下从带有 href 或其他内容的 .html 文件调用 .java 文件吗[关闭]

我可以在不提供内容的情况下使用自动续订订阅吗?