ミディアムトラストがあなたの行動を妨げていることは何ですか? たとえば、中程度の信頼では System.IO.Path.GetTempPath() を使用できないことを既に知っています。他にどんなものがありますか?
6 に答える
信頼の問題について学び、解決する方法は次のとおりです。
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 などの差分ツールで web_mediumtrust.config と web_hightrust.config を差分します。
5) 設定を高から中へ 1 つずつコピーして、アプリへの影響を確認します。私の場合、エラー メッセージは ConfigurationPermission を参照していたので、簡単に診断できました。
ブロックしている web_mediumtrust.config ファイルの正確な行を突き止めることができれば、それをホスティング会社と共有して、問題を解決できる可能性が高くなります。
詳細なドキュメントはこちら:
http://msdn.microsoft.com/en-us/library/aa302425.aspx
@Oli、私のアプリは GoDaddy でホストされており、 Lucene.NETの使用を開始したときに、コードでいくつかの回避策を実行する必要がありました。GetTempPath と System.IO.FileInfo を使用しないように Lucene.NET ソース コードを変更する必要がありました。
誰が確信できますか?そのため、web.config で中程度の信頼レベルを設定して開発する必要があります。
<trust level="Full|High|Medium|Low|Minimal" />
ほとんどの共有ホストは真の中程度の信頼環境を使用していません。他の人は、独自の肛門の理由でいくつかの追加設定を制限しています.
あなたができる最善のことは、ホストに ASPNET に使用する設定を尋ねることです。彼らが使用している信頼レベルの仕様を尋ねます。メモリ制限を調べます。これらの詳細を取得したら、ローカル レベルでシナリオを複製できるはずです。
彼らが教えてくれない場合は、アプリを中程度の信頼で実行するように設定するだけですが、変更された信頼レベルを使用している場合、(明らかに) 必ずしも機能するとは限りません。
IIS での信頼レベルの設定に関する情報を次に示します。
一般的に、私が遭遇した唯一の問題は次のとおりです。アセンブリをプッシュしている場合は、部分的に信頼された要求 (アセンブリ メタタグ) を許可するようにしてください。そうしないと、それらを使用できなくなります。
以下は、 GoDaddy のミディアム トラスト情報ページの抜粋です。
中程度の信頼レベルで動作するアプリケーションは、レジストリへのアクセス、Windows イベント ログへのアクセスがなく、ReflectionPermission を使用できません (ただし、Reflection は使用できます)。このようなアプリケーションは、定義された範囲のネットワーク アドレスとのみ通信でき、ファイル システムへのアクセスはアプリケーションの仮想ディレクトリ階層に制限されます。
中程度の信頼レベルを使用すると、アプリケーションが共有システム リソースにアクセスできなくなり、アプリケーションが干渉する可能性がなくなります。OleDbPermission と OdbcPermission を追加すると、アプリケーションはこれらのデータ プロバイダーを使用してデータベースにアクセスできます。WebPermission は、アウトバウンドの http および https トラフィックを許可するように変更されています。
(GoDaddy を使用している場合を除いて) ホストで回避する必要がある内容と正確に一致しない場合がありますが、これは典型的な例です。
system.runtime.serialization ライブラリは、中程度の信頼では完全に利用できません。
私はjsonのシリアライゼーション/デシリアライゼーションのためにこれをコーディングし、難しい方法を見つけました。中程度の信頼の制限が原因であることをアソシエイトに確認してもらうのに 1 週間かかりました。その結果、ホスティング会社を切り替えることになりました。
中程度の信頼では、少なくとも私のホストでは、P/INVOKE 呼び出しは利用できません。つまり[DLLImport]
、COM コンポーネントを呼び出すために使用することはできません。
-エドード
サードパーティのライブラリ/フレームワーク (Castle が思い浮かびます) が中程度の信頼でビルドされている (またはビルドできる) ことを確認してください。