2011-05-19 55 views
2

我想用一个WCF使用webHttpBinding替换旧的REST /普通旧的XML Web服务。它必须与现有客户端向后兼容 - 当前客户端不会在请求中发送内容类型标头。我可以在不设置内容类型的情况下调用WCF服务吗?

当我将客户端指向我的新Web服务时,出现HTTP ERROR 415 - 缺少内容类型。

是否可以配置WCF,以便它接受原始请求而不使用内容类型头?

回答

0

在.NET 3.5的答案是否定的。看来内容类型在传输层而不是应用程序层中被错误地验证。解决此问题的唯一方法是使用自定义绑定与自定义HtppTransportChannel。

此错误是固定在.NET 4.0中

1

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


更新:

显然,这是在.NET Framework的早期版本中的错误,有一个解决方法/修复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

+0

我已经试过上述文章中的解决方案,但是它只是解决了其中的WCF不正确地处理对某个帖子的内容类型的情况。如果没有内容类型标题,它不能解决问题。 – deltanine 2011-05-20 00:22:35

+0

你使用.Net 4还是3.5? – 2011-05-20 01:02:20

+0

3.5 - 该错误在.net 4.0中修复。 http://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 这个海报显然是通过编写一个自定义的HttpTransportChannel和HttpListener来解决这个问题,但是这看起来像是一个很大的努力来修复看起来像一个简单的问题。 – deltanine 2011-05-20 05:00:20