2012-11-08 26 views
4

我有MVC4 WebApi項目在我的開發機器上正常工作,但在部署的服務器上奇怪地執行 。這兩個盒子是Server 2008與IIS 7.5ASP.NET MVC4 WebApi參數爲空 - 僅在一臺機器上

我有一個單一的控制器與一個單一的Post方法,需要一個複雜的類型作爲 參數。我強制使用格式化程序XmlMediaTypeXmlSerialization,因此 HttpConfiguration.Formatters.XmlFormatter.UseXmlSerializer = true和複雜類型是「舊學校」XmlSerializable

對於相同的請求,我的開發盒正確地將正文中的XML反序列化爲 一個複雜類型的實例,並且從Post方法返回給客戶端的結果是正確的。在另一臺機器上,在到達Post方法時參數實例是null

我必須重申,這是相同的代碼和相同的請求(主機名爲 除外)。這讓我認爲機器之間必須有不同的環境保護。不幸的是,經過多次搜索,我仍然不知道這可能是什麼。

我還應該指出,如果我修改我的Post方法以接受字符串參數 ,然後在內部自行執行反序列化,則兩個框的行爲是相同且正確的。

我也實現了自定義序列化程序(XmlFormatter.SetSerializer),並且再次使用 開發框工作;另一個產生null參數。有趣的是,當我在反序列化之前登錄 時,在這種情況下,我在兩臺機器上看到相同的XML。只是一個盒子在通往Post方法的途中丟掉了反序列化的值。

任何人都可以提供一些建議,如何進行排查這種奇怪的 行爲?

回答

2

檢查控制器上的ModelState。如果反序列化由於任何原因而失敗,它將被記錄爲ModelState異常。它可以幫助你至少弄清楚發生了什麼。

+0

謝謝Youssef,這絕對有幫助。 ModelState顯示非工作服務器抱怨發佈的XML的格式 - 「XML文檔中存在錯誤(1,14)」。有趣的是,根節點長度爲13個字符,所以無論什麼是「壞」就是在那之後。即使我拿出所有的空白,並且第一個子節點是下一個,我仍然會得到投訴。再次,即使在wireshark級別,EXACT相同的請求也可以在我的開發機器上運行。任何其他想法爲什麼xml解析會有所不同機器之間? – ddevogel

+0

你在兩臺機器上運行相同版本的框架嗎?在相同版本的框架和相同操作系統上運行相同代碼的服務器的相同請求應具有相同的行爲。我和你一樣難住。 –

+0

非常敏銳的問題!我忽略了包含此解決方案包含MS便攜式類型庫項目的詳細信息。使用VS2010 PTL是一個不帶VS2010的插件和服務器,插件需要框架更新(http://www.microsoft.com/en-us/download/details.aspx?id=3556)以使它們像VS2010一樣工作和插件。終於到了這一點,這是一個漫長而痛苦的時刻,但更新解決了我的問題。感謝您讓我走上正軌! – ddevogel