所有
我在我创建的新应用程序域上调用CreateInstanceAndUnwrap时遇到无法解释的错误。完整的错误文本是:
键入' System.Net.Http.HttpRequestMessage'在集会中 ' System.Net.Http,Version = 4.0.0.0,Culture = neutral, 公钥= b03f5f7f11d50a3a'未标记为可序列化。
子appdomain是在Web API应用程序中创建的,I类型尝试创建代理以从MarshalByRefObject派生。
定义此类型的程序集没有引用System.Net.Http或System.Web - 所以我不清楚为什么HttpRequestMessage可序列化有任何影响。
我的猜测是,它试图将一些上下文数据从父AppDomain复制到孩子AppDomain,但也许这里有人可以了解一下发生了什么?
以下是相关代码:
var appDomain = AppDomain.CreateDomain("AName", null, AppDomain.CurrentDomain.SetupInformation);
SomeClient client = appDomain.CreateInstanceAndUnwrap(typeof(SomeClient).Assembly.FullName, typeof(SomeClient).FullName) as SomeClient;
" SomeClient"类型及其父程序集没有任何web / system.net.http引用。
答案 0 :(得分:0)
我找到了答案。
问题出在我们自己的自定义日志框架中,它通过委托处理程序挂钩到应用程序中。
在此日志记录框架中,另一位开发人员正在操纵调用上下文: https://msdn.microsoft.com/library/w61s16a1(v=vs.100).aspx
将整个HTTP请求存储在其中。在启动新的AppDomain时,它试图将此调用上下文传递过来,因此出现序列化错误。