【发布时间】:2016-02-23 14:05:54
【问题描述】:
全部,
在我创建的新 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 引用。
【问题讨论】:
-
请向我们展示行代码,甚至更多行,如果没有更广泛的上下文,很难推断出来
-
使用 HttpRequestMessage 的代码必须严格运行在 AppDomain 中,您不能通过公共属性或方法参数在您的 MBRO 派生类中公开它。在网络应用程序中应该相当棘手而且价格昂贵。
-
谢谢 - 添加了示例代码。我并没有尝试跨应用程序域编组 HTTP 请求,事实上这就是我想要避免的。
标签: c# .net serialization appdomain