私はLINQPadを使ってコードをテストしていますが、これはThread.CurrentPrincipalをマークされたカスタムIPrincipalに設定しようとすると例外が発生します私はLINQPad(言語としてC#プログラム)でこのコードを実行すると、私はSerializableの属性のすべてを削除した場合linqpadとカスタムIPrincipalのシリアライズ可能
void Main()
{
Thread.CurrentPrincipal = new MyCustomPrincipal();
}
// Define other methods and classes here
[Serializable]
public class MyCustomPrincipal : IPrincipal
{
public bool IsInRole(string role)
{
return true;
}
public IIdentity Identity
{
get
{
return new WindowsIdentity("RECUPERA\\m.casamento");
}
}
}
は、私は次の例外
Type is not resolved for member 'UserQuery+MyCustomPrincipal,query_nhxfev, Version=0.0.0.0,
Culture=neutral, PublicKeyToken=null'
RuntimeMethodInfo: PluginWindowManager.get_Form()
を取得し、問題を示すサンプル以下SerializableAttribute とうまくいく。これは、LINQPadが使用するAppDomainアーキテクチャと、MyCustomPrincipalを定義するアセンブリをフレームワークが見つけることができないことに関連する問題です。 また、MyCustomPrincipalを別のアセンブリに定義してGACに組み込むことで問題は解決しますが、それは私の選択肢ではありません。 誰でもアイデアはありますか?
おかげで、 マルコ
EDIT:それは助けることができれば、私は知りませんが、私はSqlDependency.Startと同じ問題を抱えていました:IPrincipalにシリアライズを置くと、エラーをスローするためのフレームワークを作りましたIPrincipalの型を定義するアセンブリを見つけることができないと不平を言った。
System.Security.Principal.IPrincipal principal;
principal = System.Threading.Thread.CurrentPrincipal;
System.Threading.Thread.CurrentPrincipal = null;
try
{
SqlDependency.Start(connectionString);
m_SqlDependencyStarted = true;
}
catch (Exception ex)
{
throw (ex);
}
finally
{
System.Threading.Thread.CurrentPrincipal = principal;
}
これはLINQPadの問題のように見えるん。私はそれをより詳細に調べて返信します。 –
@JoeAlbahariこの更新情報はありますか?それは本当に迷惑で、私は回避策が見つからなかった – mCasamento
私はここで答えを見つけたと思った:http://stackoverflow.com/questions/11489673/preventing-thread-currentprincipal-from-propagating-across-application-domains、クロスドメインコールは両側から開始されるため、LINQPadでは機能しません。 LINQPadには、ホストとワーカーのドメイン間には*たくさんの通信があります。これには十数以上の方法があります。これは単なる呼び出しをハッキングする問題ではありません。 –