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

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

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

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

【问题讨论】:

    标签: xml wcf rest content-type webhttpbinding


    【解决方案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 中修复

    【讨论】:

      猜你喜欢
      • 2012-08-17
      • 1970-01-01
      • 2016-06-15
      • 2011-11-23
      • 2016-12-16
      • 2015-12-01
      • 2011-11-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多