2011-05-19 57 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