我正在尝试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 中的 System.Net.AsyncProtocolRequest 类型,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089 未标记为可序列化。
编辑:调用后抛出异常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 64 位。
编辑:这也是 .NET 4 中的一个问题。