AppDomain CreateInstanceAndUnwrap:类型未标记为可序列化

时间:2016-02-23 14:05:54

标签: c# .net serialization appdomain

所有

我在我创建的新应用程序域上调用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引用。

1 个答案:

答案 0 :(得分:0)

我找到了答案。

问题出在我们自己的自定义日志框架中,它通过委托处理程序挂钩到应用程序中。

在此日志记录框架中,另一位开发人员正在操纵调用上下文: https://msdn.microsoft.com/library/w61s16a1(v=vs.100).aspx

将整个HTTP请求存储在其中。在启动新的AppDomain时,它试图将此调用上下文传递过来,因此出现序列化错误。