【问题标题】:Multiple appdomains in Web API 2Web API 2 中的多个应用程序域
【发布时间】:2018-01-03 17:50:32
【问题描述】:

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

看来这段代码:

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

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

编辑:此 API 是用于访问现有软件(“仅”几百万行代码)数据的新接口,这意味着我无法真正做我想做的事. “用户”实际上更像是一个“帐户”,这意味着从技术上讲,我可以将数百个客户端连接为同一个“用户”。 编辑结束

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

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

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

由于序列化有时需要访问用户的静态数据,我最终会经常遇到序列化错误。

我正在寻找一种方法来跳过由 Web API 2 引起的额外序列化或强制此序列化发生在特定的 AppDomain 中。

我没有在我正在使用的 .Net 包的文档中找到任何关于这两个想法的提示,也没有在已经提出的问题中找到任何提示。

任何想法(甚至是解决方法)都将不胜感激 =)

感谢您的任何贡献;)

【问题讨论】:

  • 您正在为每个用户创建一个AppDomain?除了WRONG, WRONG, WRONG,我什至不知道如何回应。你从错误的起点开始,或者在路上走了非常错误的岔路口。与其告诉我们你做坏事的实验,不如告诉我们你的总体目标是什么?
  • 当我读到这个问题时,我的下巴都掉了下来。我很难相信有人会像这样使用 AppDomains。说真的,您的所有用户都需要一个 AppDomain。

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


【解决方案1】:

问题确实来自一个包含 A LOT 信息的静态类(因此定义在 AppDomain 级别),并在整个代码中用于一些属性的 getter(我知道这是一种不好的做法,但很遗憾,我现在无法更改)。

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

【讨论】:

    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-11
    相关资源
    最近更新 更多