3

そのため、ここ数日、ASP.netMVC4と新しいWebAPIで遊んでいます。新しいアプリを起動するときに常に最初に行うことの1つは<trust level="Medium" />、Web.configにスローされるため、アプリがほとんどのホストで実行されることを確認できます。

通常、私がストックのMicrosoftのものを使用する場合、すべてが問題なく機能します。しかし今夜、私はBradWilsonのWebstackofLoveプレゼンテーションに続いて問題を抱えていました。私のすべてのAJAX呼び出しはServer500エラーを返していました。ただし、ブラウザで直接WebAPIにアクセスすると、すべてがXML形式で返されます。

したがって、WebAPIコントローラーを使用したJSONへのシリアル化が問題の原因であると思います。私の質問は、これを回避する方法ですか?

マイクロソフトが共有ホストに安全にプレイして中程度の信頼に固定するように教えてから、中程度の信頼では機能しない新しいWebテクノロジを作成するのは気になります。それが最終リリースであり、バイナリがGACにインストールされている場合、おそらくすべてがうまくいくでしょうか?共有ホストが最新かつ最高のものにアップグレードするには、数か月かかる場合があります。

最大の問題は通常、リフレクションであるようです。私が試したものの90%以上が、Medium Trustで実行されないのは、これが原因です(たとえば、ViewModelを手動でコーディングする代わりにAutoMapperを使用したいです。 =>エンティティマッピング)。リフレクションをアプリ内のアセンブリに限定して、ミディアムトラスト機能セットの一部にし、この問題を過去のものにする方法はありますか?


Global.asaxでApplication_Errorイベントが発生していないことがわかったときに、IISでFailedRequestTracingを設定しました。これはスローされる例外です。詳細を取得する方法がわかりません。

Warning -MODULE_SET_RESPONSE_ERROR_STATUS 
ModuleName ManagedPipelineHandler 
Notification 128 
HttpStatus 500 
HttpReason Internal Server Error 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo
Notification EXECUTE_REQUEST_HANDLER
ErrorCode The operation completed successfully. (0x0)

問題を表示しているサンプルプロジェクトへのリンク。また、ベースの「テスト」ディレクトリには、私のフィドルテストのスクリーンショットが含まれています:XML-fiddle.png&JSON-fiddle.png。

4

2 に答える 2

1

Web APIは、中程度の信頼で問題なく機能します。また、RCバージョン以降、GACにはデプロイされていません。Web API dllをサーバーにxcopyして参照するだけです(または、プロジェクトをVSから公開するか、ホストがAzureのようにサポートしている場合はgit公開するだけです)。

あなたは愛のウェブスタックについて言及します。さて、中程度の信頼モードでは機能しないのはSignalRです。ここを参照してください-DavidFolwerによると、すぐには表示されませんhttps://github.com/SignalR/SignalR/issues/364

最後に、エラー500が発生した場合は、常にこれをGlobal.asaxに追加してください。

 GlobalConfiguration.Configuration.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;

詳細なエラーを受け取ります。

于 2012-07-29T08:14:29.487 に答える
0

私の問題は、循環関係を持つエンティティのシリアル化に関係していました(この場合、国=>州、州=>国)。JSONシリアライザーはこれを処理できなかったため、JSONを要求するときに500エラーが発生しました。

私はよくエンティティを直接使用して、物事をモックアップしてプロトタイプを取得します。とにかく、私は常に別個のビューモデルを使用することを計画していましたが、何が起こっているのか、なぜ失敗したのかを理解したかったのです。

ASP.netフォーラムの質問でのKiranChallaの回答は、発生していたエラーを取得するのに役立ちました。「RelationshipManagerオブジェクトをシリアル化できませんでした。RelationshipManagerがIEntityWithRelationshipsを実装していないエンティティオブジェクトに属している場合、このタイプのオブジェクトはシリアル化できません。」

それから、johnnycode.comのJSON.NetとEntityFrameworkを使用した循環参照のシリアル化につながりました。

于 2012-08-06T15:53:23.360 に答える