4

私の開発マシンでは正常に動作している MVC4 WebApi プロジェクトがありますが、デプロイされたサーバーでは奇妙な動作をしています。どちらのボックスも IIS 7.5 を搭載した Server 2008 です

複雑な型をパラメーターとして受け取る単一の Post メソッドを持つ単一のコントローラーがあります。強制的にXmlMediaTypeフォーマッタなどを使用しXmlSerializationHttpConfiguration.Formatters.XmlFormatter.UseXmlSerializer = trueおり、複合型は「オールドスクール」XmlSerializableです。

同じリクエストに対して、開発ボックスは本文の XML を複合型のインスタンスに正しく逆シリアル化し、メソッドからクライアントに返される結果Postは正しいです。他のマシンでは、パラメーター インスタンスがメソッドnullに到着しPostます。

これは同一のコードであり、同一の要求であることを繰り返します (ホスト名を除く)。それは、マシン間で環境的に異なる何かがなければならないと私に思わせます. 残念ながら、多くの検索を行った後でも、それが何であるかはまだわかりません。

Postまた、メソッドを変更して文字列パラメーターを受け取り、内部で逆シリアル化を行う場合、両方のボックスでの動作は同じで正しいことも指摘しておく必要があります。

カスタム シリアライザー ( ) も実装しましたが、ここでも開発XmlFormatter.SetSerializerボックスが機能します。もう 1 つはnullパラメーターを生成します。興味深いことに、この場合、逆シリアル化の前にリクエストの本文をログに記録すると、両方のマシンで同じ XML が表示されます。Post1 つのボックスが、デシリアライズされた値をメソッドの途中のどこかにドロップするだけです。

この奇妙な動作のトラブルシューティングを進める方法について、誰か提案を提供できますか?

4

1 に答える 1

2

コントローラのModelStateを確認してください。何らかの理由で逆シリアル化が失敗した場合、ModelState例外として記録されます。少なくとも何が起こっているのかを理解するのに役立つかもしれません。

于 2012-11-08T21:54:19.447 に答える