ASP.NETアプリを共有ホストのMedium Trustの下で実行するために、ASP.NETアプリへのコーディングを避けるための最も一般的で典型的なことは何ですか?
-
07-07-2019 - |
質問
Medium Trustがあなたの行動を妨げるものは何ですか?たとえば、Medium Trustを使用すると、System.IO.Path.GetTempPath()の使用が停止されることが既にわかっています。他にどんなことがありますか?
解決
信頼の問題について学び、解決する方法は次のとおりです。
1)Windows \ Microsoft.NET \ Framework [YOUR VERSION] \ CONFIGフォルダーでファイルを検索します:
- web.config(これはルート構成ファイルです)
- web_mediumtrust.config
- web_hightrust.config
2)web.configを変更して言う
<trust level="Medium" originUrl="" />
3)ASP.NETアプリを試してください。鉱山は許可エラーで失敗しました。
4)WinMergeなどのdiffツールでweb_mediumtrust.configとweb_hightrust.configを比較します。
5)一度に設定を高から中に1つずつコピーし、それらがアプリに与える影響を確認します。私の場合、エラーメッセージはConfigurationPermissionを参照していたため、簡単に診断できました。
あなたをブロックしているweb_mediumtrust.configファイルの正確な行を特定できれば、それをホスティング会社と共有して、うまくいく可能性があります。
その他のドキュメントはこちら:
http://msdn.microsoft.com/en-us/library/aa302425。 aspx
@Oli、私のアプリ
他のヒント
誰が確認できますか?そのため、web.configで設定された信頼レベルを中に設定して開発する必要があります。
<trust level="Full|High|Medium|Low|Minimal" />
ほとんどの共有ホストは、真に中程度の信頼環境を使用しません。これは、非常に重要なものを制限するためです。他の人は、独自の肛門の理由のためにいくつかの追加設定を制限しています。
できる最善のことは、ホストにASPNETに使用する設定を尋ねることです。使用している信頼レベルの仕様を確認してください。メモリ制限を確認してください。これらの詳細を取得したら、ローカルレベルでシナリオを複製できるはずです。
通知されない場合は、アプリを中程度の信頼で実行するように設定しますが、変更された信頼レベルを使用している場合、(明らかに)必ずしも動作しません。
一般的に私が遭遇した唯一の問題は、アセンブリをプッシュする場合、部分的に信頼されたリクエスト(アセンブリメタタグ)を許可することです。そうしないと、それらを使用できません。
メディアの下で動作するアプリケーション 信頼レベルにはレジストリへのアクセス権がありません。 Windowsイベントログへのアクセスなし、 ReflectionPermissionを使用できません (ただし、Reflectionを使用できます)。そのような アプリケーションはとのみ通信できます 定義されたネットワークアドレスの範囲 ファイルシステムへのアクセスは制限されています アプリケーションの仮想ディレクトリ 階層。
中レベルの信頼レベルを使用すると、 共有へのアクセスからのアプリケーション システムリソースと排除 適用の可能性 干渉。 OleDbPermissionを追加する OdbcPermissionはアプリケーションを許可します これらのデータプロバイダーを使用してアクセスする データベース。 WebPermissionが変更されました アウトバウンドhttpおよびhttpsを許可する トラフィック。
(GoDaddyを使用している場合を除き)ホストで回避する必要があるものに正確にマッピングされない場合がありますが、これは典型的な例です。
サードパーティのライブラリ/フレームワーク(Castleが思い浮かぶ)が中程度の信頼で構築されている(または構築できる)ことを確認します。
system.runtime.serializationライブラリは、中程度の信頼では完全に利用できません。
jsonのシリアル化/逆シリアル化のためにこれをコーディングし、難しい方法を見つけました。中程度の信頼制限が原因であることを同僚に確認させるのに1週間かかりました。その結果、ホスティング会社を切り替えることになりました。
中程度の信頼では、少なくとも私のホストでは、P / INVOKE呼び出しは使用できません。つまり、 [DLLImport]
を使用してCOMコンポーネントを呼び出すことはできません。
-Edoode