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

C# AppDomain CreateInstanceAndUnwrap:类型未标记为可序列化,c#,.net,serialization,appdomain,C#,.net,Serialization,Appdomain,全部, 在我创建的新appdomain上调用CreateInstanceAndUnwrap时,我遇到一个无法解释的错误。错误全文如下: 在程序集中键入'System.Net.Http.HttpRequestMessage' 'System.Net.Http,版本=4.0.0.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a'未标记为可序列化 子appdomain是在web API应用程序中创建的,我尝试为其创建代理的类型派生自MarshalByRefObject

全部,

在我创建的新appdomain上调用CreateInstanceAndUnwrap时,我遇到一个无法解释的错误。错误全文如下:

在程序集中键入'System.Net.Http.HttpRequestMessage' 'System.Net.Http,版本=4.0.0.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a'未标记为可序列化

子appdomain是在web API应用程序中创建的,我尝试为其创建代理的类型派生自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引用。

我找到了答案

问题出在我们自己的定制日志框架中,该框架通过委托处理程序连接到应用程序中

在此日志框架中,另一名开发人员正在操纵调用上下文:

将整个HTTP请求存储在其中。当旋转新的AppDomain时,它试图在调用上下文上流动,因此出现序列化错误

我找到了答案

问题出在我们自己的定制日志框架中,该框架通过委托处理程序连接到应用程序中

在此日志框架中,另一名开发人员正在操纵调用上下文:


将整个HTTP请求存储在其中。当旋转新的AppDomain时,它试图在调用上下文上流动,因此出现序列化错误

请向我们显示行代码或更多行如果没有更广泛的上下文很难扣除使用HttpRequestMessage的代码必须严格在AppDomain中运行,您不能通过公共属性或方法参数在MBRO派生类中公开它。在web应用程序中应该是相当棘手的,而且很昂贵。谢谢-添加了示例代码。我没有试图跨应用程序域封送HTTP请求,事实上,这正是我试图避免的。请向我们显示行代码或更多行如果没有更广泛的上下文很难扣除使用HttpRequestMessage的代码必须严格在AppDomain中运行,不能通过公共属性或方法参数在MBRO派生类中公开它。在web应用程序中应该是相当棘手的,而且很昂贵。谢谢-添加了示例代码。我没有试图跨应用程序域封送HTTP请求,事实上,这正是我试图避免的。