Web API 2中的多个appdomains

时间:2018-01-03 17:50:32

标签: c# asp.net-web-api2 owin appdomain

我试图将Web项目从IIS托管移动到自托管结构。我使用Owin和Web API 2。

看来这段代码:

using (WebApp.Start<Startup>(url))
{
  bla...
}

创建一个AppDomain(ID == 1)。

编辑:此API是一个新界面,用于访问现有软件的数据(仅#34;几百万行代码),这意味着我可以&#39我真的做我想做的事。 A&#34;用户&#34;实际上更像是一个&#34;帐户&#34;,这意味着我在技术上可以将数百个客户端连接为相同的&#34;用户&#34;。 编辑结束

我遇到的问题如下:当客户端登录时,我创建一个AppDomain来加载其静态数据。由于同一个帐户可以同时拥有多个会话(例如,在智能手机+计算机上连接相同的用户),我必须在Session和AppDomain之间做出改变。

因此,我所有的控制器都在调用API的用户的AppDomain中调用,所有服务也是如此。

但是,Web API 2似乎在每个Controller之后添加了一个序列化层。此序列化层发生在我手动创建的所有AppDomain的范围之外:它位于ID == 1的AppDomain中。

由于序列化有时需要访问用户的静态数据,因此我最终会出现频繁的序列化错误。

我正在寻找一种方法来跳过Web API 2引发的其他序列化,或强制在特定的AppDomain中进行此序列化。

我还没有在我使用的.Net软件包的文档中找到任何提示,也没有在已经提出的问题中找到任何提示。

任何想法(甚至是变通方法)都会非常感激=)

感谢您的贡献;)

1 个答案:

答案 0 :(得分:0)

问题实际上来自一个静态类(因此在AppDomain级别定义),其中包含 A LOT 信息,并在整个代码中使用了一些属性(我知道它&#39;这是一种不好的做法,但不幸的是我现在无法改变它。)

我最终提出的解决方案是在创建的AppDomains中手动序列化所有内容,从而解决问题。