SslStream
新しい にオブジェクトを作成しようとしていますAppDomain
。ただし、BeginAuthenticateAsClient
ストリームでメソッドを実行すると、例外がスローされます。
internal class SslWrapper : MarshalByRefObject
{
public void CreateStream(Stream innerStream)
{
var ioStream = new SslStream(innerStream,
false,
ValidateRemoteCertificate,
SelectLocalCertificate);
ioStream.BeginAuthenticateAsClient("Target",
GetCertificates(),
SslProtocols.Tls,
false,
new AsyncCallback(CallbackMethod),
null);
}
private void CallbackMethod(IAsyncResult result)
{
// TODO: handle callback...
}
}
例外は次のように述べています。
Assembly System、Version=2.0.0.0、Culture=neutral、PublicKeyToken=b77a5c561934e089 の System.Net.AsyncProtocolRequest 型は、シリアル化可能としてマークされていません。
編集:を呼び出した後に例外がスローされBeginAuthenticateAsClient()
ます。SelectLocalCertificate()
コールバック メソッドが呼び出されますが、呼び出されませValidateRemoteCertificate()
ん。
新しいAppDomain
とSslWrapper
は次のように作成されます。
_appDomain = AppDomain.CreateDomain(name, null, new AppDomainSetup { PrivateBinPath = pathToDll });
_wrapper = (SslWrapper)_appDomain.CreateInstanceFromAndUnwrap(pathToDll, typeof(SslWrapper).FullName);
_wrapper.CreateStream(innerStream);
AuthenticateAsClient()
デフォルトで非同期コードを実行する場合と同様に、代わりに同期を使用すると正常に動作しますAppDomain
。
例外は AsyncCallback メソッドに関連していると思います。ただし、このメソッドは AppDomain の境界を越えてはならないのに、なぜ例外が発生するのでしょうか? さらに重要なことに、それを回避することは可能ですか?
.NET 2、WinXP 64bit を使用しています。
編集:これは .NET 4 の問題でもあります。