为 PerSession WCF 服务调用两次静态构造函数

2023-11-23

无法理解为什么类型构造函数PerSession/WCF 服务调用了两次。ConcurrencyMode is Multiple。 只需启动五个同时执行相同 WCF 服务方法调用的客户端,在日志中我看到static构造函数被调用两次,第一次,3 秒后第二次与另一个ProcessId/ThreadId。构造函数本身和 WCF 跟踪日志都没有异常。 根据日志,构造函数执行时间约为 10 毫秒。这导致所有静态字段并未按预期在所有服务实例之间共享,并且在 5 个客户端连接的情况下,我有 5 个服务和两个不同的静态上下文,因此这些静态字段中的更改不会反映在所有服务中。

这个问题让很多事情感到困惑,因为我依赖于在多个服务实例之间共享的一些静态缓存。

服务托管于IIS。没有 IIS 重新启动,AppPool 在此时间间隔内回收。

[AspNetCompatibilityRequirements(RequirementsMode =
  AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(
  InstanceContextMode = InstanceContextMode.PerSession, 
  IncludeExceptionDetailInFaults = true, 
  ConcurrencyMode = ConcurrencyMode.Multiple)]
public class WcfService
{ 
    private static readonly ILog logger;
    private static volatile bool typeInitialized;

    static WcfService()
    {
        try
        {
            // Here is typeInitialized is false in both calls
            logger = LogManager.GetLogger("LogName");

            logger.InfoFormat("[PID:{0}] [THID:{1}] BEGIN Static constructor",
               Process.GetCurrentProcess().Id,
               Thread.CurrentThread.ManagedThreadId);
        }
        catch (Exception exception)
        {
           logger.Error("error on type construction stage", exception);
        }
        finally
        {
            logger.InfoFormat("[PID:{0}] [THID:{1}] END Static constructor",
               Process.GetCurrentProcess().Id,
               Thread.CurrentThread.ManagedThreadId);               
           typeInitialized = true;
        }
    }
}

假设您使用 IIS 托管服务,这是正常行为,除非您显式地将进程配置为仅允许启动单个 AppDomain。

如果查看正在运行的进程列表,您会发现日志中的每个进程 ID 都与托管单独应用程序域的 w3wp.exe 副本相对应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为 PerSession WCF 服务调用两次静态构造函数 的相关文章

  • 如何在 .NET Framework 2.0 中模拟“Func<(Of <(TResult>)>) 委托”?

    我尝试使用这个类代码项目文章 http www codeproject com KB threads AsyncVar aspx在 VB NET 和 NET Framework 2 0 中 除了这一行之外 所有内容似乎都可以编译Privat
  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 复制 std::function 的成本有多高?

    While std function是可移动的 但在某些情况下不可能或不方便 复制它会受到重大处罚吗 它是否可能取决于捕获变量的大小 如果它是使用 lambda 表达式创建的 它依赖于实现吗 std function通常被实现为值语义 小缓
  • 当我们想要返回对象的引用时,为什么我们在赋值运算符中返回 *this 而通常(而不是 this)?

    我正在学习 C 和指针 我以为我理解了指针 直到我看到这个 一方面 asterix 运算符是解引用的 这意味着它返回值所指向的地址中的值 而与号 运算符则相反 它返回值存储的地址记忆 现在阅读有关赋值重载的内 容 它说 我们返回 this因
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 使用接口有什么好处?

    使用接口有什么用 我听说它用来代替多重继承 并且还可以用它来完成数据隐藏 还有其他优点吗 哪些地方使用了接口 程序员如何识别需要该接口 有什么区别explicit interface implementation and implicit
  • 在 Visual Studio 2010 中从 Fortran 调用 C++ 函数

    我想从 Fortran 调用 C 函数 为此 我在 Visual Studio 2010 中创建了一个 FORTRAN 项目 之后 我将一个 Cpp 项目添加到该 FORTRAN 项目中 当我要构建程序时出现以下错误 Error 1 unr
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 从 Linux 内核模块中调用用户空间函数

    我正在编写一个简单的 Linux 字符设备驱动程序 以通过 I O 端口将数据输出到硬件 我有一个执行浮点运算的函数来计算硬件的正确输出 不幸的是 这意味着我需要将此函数保留在用户空间中 因为 Linux 内核不能很好地处理浮点运算 这是设
  • 如何在 32 位或 64 位配置中以编程方式运行任何 CPU .NET 可执行文件?

    我有一个可在 32 位和 64 位处理器上运行的 C 应用程序 我试图枚举给定系统上所有进程的模块 当尝试从 64 位应用程序枚举 32 位进程模块时 这会出现问题 Windows 或 NET 禁止它 我认为如果我可以从应用程序内部重新启动
  • 使用自定义堆的类似 malloc 的函数

    如果我希望使用自定义预分配堆构造类似 malloc 的功能 那么 C 中最好的方法是什么 我的具体问题是 我有一个可映射 类似内存 的设备 已将其放入我的地址空间中 但我需要获得一种更灵活的方式来使用该内存来存储将随着时间的推移分配和释放的
  • C# 中的合并运算符?

    我想我记得看到过类似的东西 三元运算符 http msdn microsoft com en us library ty67wk28 28VS 80 29 aspx在 C 中 它只有两部分 如果变量值不为空 则返回变量值 如果为空 则返回默
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • “接口”类似于 boost::bind 的语义

    我希望能够将 Java 的接口语义与 C 结合起来 起初 我用过boost signal为给定事件回调显式注册的成员函数 这非常有效 但后来我发现一些函数回调池是相关的 因此将它们抽象出来并立即注册所有实例的相关回调是有意义的 但我了解到的
  • 使用 %d 打印 unsigned long long

    为什么我打印以下内容时得到 1 unsigned long long int largestIntegerInC 18446744073709551615LL printf largestIntegerInC d n largestInte
  • 调用堆栈中的“外部代码”是什么意思?

    我在 Visual Studio 中调用一个方法 并尝试通过检查调用堆栈来调试它 其中一些行标记为 外部代码 这到底是什么意思 方法来自 dll已被处决 外部代码 意味着该dll没有可用的调试信息 你能做的就是在Call Stack窗口中单
  • C++ 条件编译

    我有以下代码片段 ifdef DO LOG define log p record p else define log p endif void record char data 现在如果我打电话log hello world 在我的代码中
  • 无法接收 UDP Windows RT

    我正在为 Windows 8 RT 编写一个 Windows Store Metro Modern RT 应用程序 需要在端口 49030 上接收 UDP 数据包 但我似乎无法接收任何数据包 我已按照使用教程进行操作DatagramSock
  • 我的班级应该订阅自己的公共活动吗?

    我正在使用 C 3 0 遵循标准事件模式我有 public event EventHandler

随机推荐

  • 解析日期时间,时区格式为 PST/CEST/UTC/etc

    我正在尝试解析类似于以下内容的国际日期时间字符串 24 okt 08 21 09 06 CEST 到目前为止我已经得到了类似的东西 CultureInfo culture CultureInfo CreateSpecificCulture
  • jQuery DataTables - 通过精确匹配过滤列

    尝试仅显示与搜索栏中输入的搜索词完全匹配的内容 例如 我有一个按 ID 进行过滤的搜索栏 我只想显示与输入的确切 匹配的记录 So if 123已输入 我不想要12345 91239等要显示的内容 仅有的123 看到一些关于bRegex在常
  • 如何将 AES 初始化向量传递给混合密码系统的客户端

    我需要实现客户端 服务器通信的安全性 我已经实施了以下混合密码系统 为了在混合密码系统中加密发送给 Alice 的消息 Bob 执行以下操作 获取Alice的公钥 为数据封装方案生成新的对称密钥 使用刚刚生成的对称密钥在数据封装方案下加密消
  • Ajax Control Toolkit 加载了太多脚本资源

    我创建了一个新项目 我从 NuGet 安装了 Ajax Control Toolkit 然后我使用以下代码创建了一个新页面 aspx
  • 如何从多类分类的混淆矩阵中提取假阳性、假阴性

    我正在使用以下 Keras 代码对 mnist 数据进行分类 从confusion matrix的命令sklearn metrics我得到了混淆矩阵并且来自TruePositive sum numpy diag cm1 命令我能够得到真阳性
  • 使用堆栈的非递归深度优先搜索 (DFS)

    好吧 这是我在 Stack Overflow 上的第一篇文章 我已经阅读了一段时间并且非常欣赏这个网站 我希望这是可以接受的问题 所以我一直在阅读 算法简介 Cormen MIT Press 并且我已经了解了图形算法 我一直在非常详细地研究
  • 将逗号分隔值转换为双引号逗号分隔字符串

    我有一个逗号分隔的值 例如 alpha beta charlie 我怎样才能将它转换为 alpha beta charlie 在 php 中使用单个函数而不使用str replace Richard Parnaby King 函数的替代方案
  • 如何检查字符串是否以 Java 字符串列表中的任何条目结尾

    我有一个文件名和扩展名列表 我想检查文件名是否以列表中的任何扩展名结尾 String fileName abc txt String extensions txt doc pdf 我可以手动检查扩展名列表 并检查文件是否以列表中的任何扩展名
  • 使用 Sublime Text 2 进行特定于语法的突出显示

    我想知道是否有一种方法可以为同一文件中的不同语言标签提供两种不同的标签颜色 美国的 颜色 例如 假设我在同一个 cfm 文件中具有 ColdFusion 代码和 HTML 代码 我可以将 ColdFusion 标签设为红色 将 HTML 标
  • 在 AVFoundation 中捕获缩放预览视图

    我正在使用 AVFoundation 相机中的缩放功能 我通过缩放具有 AVCaptureVideoPreviewLayer 的视图来实现缩放 现在我想捕捉缩放图像 这是我添加 AVFoundation Video PreviewLayer
  • 当 DataTables 表加载 Ruby on Rails 时显示微调器

    我使用 Rails 构建了一个网络应用程序 Web 应用程序的其中一个页面显示了一个表格 该表格使用数据表API This JSFiddle显示了我的网络应用程序的示例 问题在于 当我开始添加大量数据 当前测试数据为 1500 行 时 表会
  • Google 图表 - 仪表图动画不起作用

    我正在尝试使用 Google Graphs 创建一些 GAUGE 图表 我的目标是从 php 页面加载数据并自动刷新 我能够做到这一点 但是当刷新数据时 仪表线不是动画的 而是从新的重新绘制的 我希望看到这样的酷动画 https jsfid
  • Room 如何转换定制对象

    我是 Room 的新手 我不明白应该如何解决这个问题 我有一个实体Movie另一个实体称为 pcomingMovies Entity public class Movie PrimaryKey NonNull public String i
  • 对于 Internet 上的 WCF 服务来说,传输安全性是一种不好的做法吗?

    我有一个可通过 Internet 访问的 WCF 服务 它具有 wsHttpBinding 绑定和消息安全模式 并使用用户名凭据来验证客户端 msdn说我们应该在Internet场景中使用消息安全 因为它提供端到端的安全 而不是像传输安全那
  • 在 __del__ 中关闭/处理对象真的可以吗?

    我一直在思考如何用Python编写类 更具体地说 构造函数是如何实现的以及对象应该如何被销毁 我不想依赖 CPython 的引用计数来进行对象清理 这基本上告诉我应该使用 with 语句来管理我的对象生命周期 并且我需要一个显式的 clos
  • 如何在 java 8 中展平地图列表

    我有要求 我有地图列表 Men 1 Men 2 Women 3 Women 2 Boys 4 现在我需要将其设为 flatMap 使其看起来像 Gender countOfValues 在上面的例子中 输出将是 Men 3 Women 5
  • 在java中读取Excel工作表时出现NoSuchFieldError

    我遵循了使用 Apache POI XSSF 构建工作簿的简单指南 按照相同的指南 我能够编写 Excel 工作表 但是当尝试读取 Excel 工作表时 我收到代码后显示的错误 Code try FileInputStream file n
  • 反序列化集合时未调用 Setter

    我正在尝试使用 XmlSerializer 进行非常简单的序列化 public struct XmlPerson XmlAttribute public string Id get set XmlAttribute public strin
  • 使用 LINQ to SQL 存储图像:将字节数组或流转换为二进制

    我正在使用 LINQ to SQL 我的图像字段被视为二进制 当我需要渲染图像时 将 Binary 类型转换为 byte 您可以使用 Binary 对象的 ToArray 方法 并不是什么大问题 但是有人可以告诉我如何将 byte 或将对象
  • 为 PerSession WCF 服务调用两次静态构造函数

    无法理解为什么类型构造函数PerSession WCF 服务调用了两次 ConcurrencyMode is Multiple 只需启动五个同时执行相同 WCF 服务方法调用的客户端 在日志中我看到static构造函数被调用两次 第一次 3