保持表单应用程序和 Windows 服务(或任何 n 层,实际上)之间的设置同步

2023-12-09

我有一个执行许多定期活动的 Windows 服务,并且我想从 Windows 窗体应用程序更改此服务的设置。不过,我不确定确保服务具有最新的用户首选项的最佳方法(运行频率、使用哪些文件夹、用户可以指定的其他内容)。用户可以随时随意更改设置,我希望服务几乎立即知道这一点。以下是我正在权衡的选项:

  1. 表单和服务共享使用来自第三个共享项目的相同“Settings”对象,并且表单使用 WCF“UpdateSettings(newSettings)”调用来让服务知道已发生更改(或者,可选地,调用更新每个单独的设置,尽管这在不同的调用中似乎很多)。我目前使用 WCF 来处理基本消息,但设置对象可能很大,因为其中还有很多其他内容
  2. 表单和服务使用通用配置文件(XML,或与 #1 相同的设置对象,但序列化到磁盘)。表单只是在更改后写入对象的新副本,服务会经常检查并拾取它(如果是新的),更新其设置副本
  3. 与 #2 相同,但使用基本的 WCF 调用来告诉服务去获取设置。本质上,是#2 的“按需”版本,而不是“轮询”版本。

我最清楚的是主观的,但我对这些选择的任何明显的赞成或反对理由感兴趣。由于我必须在应用程序运行之间(重新启动等)保存我的设置,所以无论如何我都必须将设置序列化到磁盘,所以我已经倾向于#2 或#3。我需要在磁盘上有一个位置来保存设置,但也许 AppData 文件夹可以正常工作,尽管这只允许管理员更改设置,因为他们是唯一有权写入此位置的人(每个用户,包括服务帐户,都可以读取它)。

感谢您的见解!


我有点用你的2号。

但我只在 .NET 2 中使用我的应用程序,但它应该仍然适用。

我有一个在两个程序中使用的设置类。在这个设置类中我设置了一个文件系统观察者查看设置文件的对象。

如果其他应用程序更新了设置文件,我的当前应用程序会收到一个事件触发器来指示需要重新加载设置。

您还可以在设置屏幕中应用相同的原则,以便如果(服务)其他应用程序在设置编辑期间更新任何内容,则会反映在您的屏幕中。

我使用AppData(我的公司/应用程序名称目录)来存储文件。

另一件要记住的事情是,在写入文件时可以对文件进行锁定,因此您可以使用临时名称保存、删除旧的、重命名临时方法,或者在写入后读取文件时对文件进行一些保护性锁定。 filewatcher 事件触发已进行更改。

我在我的文件系统观察者在继续之前

IPSDependency.FileSystem.WaitForLockOnFile(Me.mFilePath)

其代码是这样的。 (现在阅读本文后,可能有更好的方法,我在这里使用一些睡眠来减少 CPU 抖动)

Public Shared Function IsLockAvailable(ByVal filename As String, ByVal fnfIsOK As Boolean) As Boolean
    Dim fi As FileInfo
    fi = New FileInfo(filename)
    Return IsLockAvailable(New FileInfo(filename), fnfIsOK)
End Function

Public Shared Function IsLockAvailable(ByVal theFile As FileInfo, ByVal fnfIsOK As Boolean) As Boolean
    Dim fs As FileStream
    Try
        If theFile.Exists Then
            fs = New FileStream(theFile.FullName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
            fs.Close()
            Return True
        Else
            Return fnfIsOK
        End If
    Catch ex As IOException
        'we just let the exception go, because we are only testing the file rather than trying to use it.
        Return False
    End Try
End Function

Public Shared Sub WaitForLockOnFile(ByVal theFilename As String)
    WaitForLockOnFile(New FileInfo(theFilename))
End Sub

Public Shared Sub WaitForLockOnFile(ByVal theFile As FileInfo)
    Dim lockAvailable As Boolean
    If theFile.Exists Then
        While Not lockAvailable
            lockAvailable = IsLockAvailable(theFile, False)
        End While
    End If
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保持表单应用程序和 Windows 服务(或任何 n 层,实际上)之间的设置同步 的相关文章

  • 检查输出是否重定向

    我有一个用 C 编写的控制台应用程序 它处理一些数据然后打印结果 在结果可用之前 会有一个小动画 和不断更新的进度百分比 xx 显然 如果用户重定向我的应用程序的输出 这将被打印到输出重定向到的文本文件中 如果可能的话我想避免这种情况 那么
  • 在对具有多个对应名称的枚举值调用 ToString() 时,什么决定选择哪个名称?

    呼叫时选择哪个名字由什么决定ToString on an enum value which has multiple corresponding names 以下是问题的长期解释 我已确定这不是由以下任何一个唯一决定的 字母顺序 报关单 也
  • 如何重置 MS Access 中的身份列

    我有一个 Windows 应用程序连接到MS Access 2007数据库 已有300多条记录Customer Table 我已经删除了所有记录 但插入新记录后CustomerID回报301 但我想将其设置为1 我尝试了以下查询 ALter
  • 使用 JSON.Net 将 C# 转换为 JSON 序列化

    我有一个 C 列表 如下所示 var reqUsers from user in users select new username user username firstName user firstName lastName user
  • 对具有 Stream 类型成员的对象进行 JSON.NET 序列化?

    希望这是一个我忽略的简单修复 我有一个对象传递到事件处理程序中 我想使用 JSON NET 序列化该对象 如下所示 public void OnEvent IEventObject foo Serialize foo to string d
  • WCF 中是否可以在没有无参数构造函数的情况下序列化对象?

    我知道私有无参数构造函数可以工作 但是没有无参数构造函数的对象又如何呢 我想公开来自第三方库的类型 因此我无法控制类型定义 如果有办法的话什么是最简单的 例如 我不知道必须创建子类型 Edit 我正在寻找类似此处所示的定制级别 http m
  • 基于 .NET 4 构建的 MEF 应用程序是否可以导入针对 .NET 3.5 构建的类型?

    我正在使用托管扩展性框架开发一个主机应用程序 它是针对 NET 4 和框架中内置的 System ComponentModel Composition 程序集构建的 我希望支持使用 NET 3 5 开发部件并以声明方式导出它们的能力 由于导
  • 从 Windows 选择声音并播放它们

    我有一个 WinForms 应用程序 该应用程序有一个 首选项 部分 用户可以在其中选择显示警报时播放哪些声音 是否可以有一个组合框 用户可以从 Windows 存储的声音中进行选择 例如 紧急停止 紧急蜂鸣 等 这些可以在 控制面板 gt
  • COM Interop 挂起会冻结整个 COM 系统。如何取消COM调用

    我正在使用通过 COM Interop 包装器公开的第三方 dll 然而 其中一个 COM 调用经常冻结 至少不会返回 为了至少让我的代码更加健壮 我异步包装了调用 getDeviceInfoWaiter is a ManualResetE
  • 托管线程多久切换一次操作系统线程?

    据我所知 托管线程不能保证在同一操作系统线程上运行 如果 CLR 可以在操作系统线程之间切换托管线程 这种情况发生的频率是多少 频率受什么影响 我有一个单独的问题 https stackoverflow com questions 1979
  • AutoMapper 无法识别特定于配置文件的前缀

    我正在尝试使用 AutoMapper 从属性名称之前有前缀的类中获取数据 并将其映射到没有这些前缀的第二个类 但是 我不一定希望它always删除该前缀 我只想让它为这个特定的映射执行此操作 我的源类如下所示 public class Ad
  • 现在正在复制文件吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C 不时检查文件是否存在并从中读取 https stackoverflow com questions 12578177 c sharp from time to time check if a fi
  • 使用 Google Calendar API 创建全天活动

    我正在使用 C 和 Google Calendar API 类 CalendarService 和 Event 我想将没有任何日期 全天 的活动上传到 Google 日历 如果我不设置 Event End 属性 则会出现异常 如何将我的活动
  • Logstash配置文件的格式是什么

    Logstash 在配置文件中使用自己的文件语法吗 是否有配置文件语法的解析器或验证器 对于不使用 Logstash 但了解文件格式的任何人 这里有一个示例语法 input file path gt var log messages typ
  • 将异步调用变成同步调用

    将异步调用转变为同步有什么好的实践 模式 吗 我有一个第三方库 它的方法都是异步的 要获得几乎任何方法的结果 您必须侦听事件 这将带来一些上下文 基本上它看起来像 service BeginSomething service OnBegin
  • 读取文件特定行号的有效方法。 (奖励:Python 手册印刷错误)

    我有一个 100 GB 的文本文件 它是来自数据库的 BCP 转储 当我尝试导入它时BULK INSERT 我在第 219506324 行上收到一个神秘错误 在解决此问题之前 我想看看这一行 但可惜的是我最喜欢的方法 import line
  • 用于检查项目文件中的项目变量和引用路径的 api

    我正在研究一个 net application VS2010 与 x 没有 解和变量号这些解决方案中的项目数量 我需要检查项目属性 特定于一定数量的项目 是否同质 并且检查 验证构建期间的参考路径 有没有一个API是这样的吗 如果没有 我该
  • 回发或回调参数无效。使用“”启用事件验证

    当我从客户端回发页面时 出现以下错误 我有修改客户端 asp ListBox 的 JavaScript 代码 我们该如何解决这个问题 错误详细信息如下 Server Error in XXX Application Invalid post
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi

随机推荐

  • As.vector 不会将 data.frame 子集转换为向量

    下面我提供了我一直在研究的一些代码片段 我已经成功地将字符串作为表格读取 我的表中存在一些子集 我希望在其上使用中值 函数 根据我所做的研究和我自己的经验 median 没有为 data frame 或 data frame 的子集定义行为
  • C# 的鼠标钩子

    我正在尝试模拟 硬件 鼠标点击 因为某些软件似乎会阻止来自 PostMessage 的输入 我知道有 SendInput 但这不是一个选项 因为我也需要它在后台窗口中兼容 解决方案似乎是一个低级鼠标钩子 但我四处搜索 除了记录器之外找不到任
  • 满足特定要求的密码正则表达式

    我要编写一个正则表达式来满足以下要求 至少一个字符 至少一位数字 长度必须为 8 至少一个特殊字符 可以是任意特殊字符 前三个很简单 但找不到一种方法来限制至少特殊字符 任何可能的特殊字符 例如 gt etc 您可以通过组合前瞻来解决这些问
  • JavaScript 的客户端 DOM 打开重定向

    我在扫描以下代码时遇到客户端 DOM 打开重定向安全问题 问题出现在我初始化变量 myPath 和 myHost 的位置 我无法理解它如何受到网络钓鱼攻击以及如何修复它 有人可以帮忙吗 var query this value var my
  • Symfony Doctrine 找不到要加载的装置

    我从 Symfony 3 4 开始 但负载夹具有问题 当我执行时php bin console doctrine fixtures load然后我收到消息 In LoadDataFixturesDoctrineCommand php lin
  • PHP PDO 潜在的逻辑错误

    我是 PHP 新手 想知道为什么这段代码不向数据库插入任何内容 返回 0 我确信这一定是一个逻辑错误 因为我没有收到任何错误消息 class DbConnection protected db conn public db host loc
  • C# 线程问题

    我正在做的是从先前的按钮单击动态创建的列表视图 然后 ti 启动一个后台工作程序 其中应清除列表视图并每 30 秒用新信息填充 iistview 我不断得到 跨线程操作无效 从创建它的线程以外的线程访问控制 listView 2 priva
  • Numpy 广播

    下面的代码给出了 a 0 11 中的元素在数组 c 的第一行中出现了多少次 a c 0 我如何调整此代码 以便它对 c 中的所有行 而不仅仅是 c 0 执行相同的操作 本质上是一个for循环 import numpy as np c np
  • 通过测试 numpy 数组中的每个元素是否在 2 个数字之间创建布尔数组

    我有一个 numpy 数字数组 我想创建一个具有相同大小和维度的布尔数组 用于说明该元素是否位于两个数字之间 例如 a np array 1 2 3 4 5 6 7 8 9 我知道如果我写 print a gt 3 我得到一个数组 其中前三
  • AVAudioPlayer 不播放任何声音

    我正在开发一个 iOS 应用程序 需要使用AVFoundation框架 Xcode 4 中的工作区结构包含两个项目 Workspace 应用程序本身 主要项目 实用程序库 构建实用程序库后 会生成一个静态库 该静态库在主应用程序中用作框架
  • Numpy:最大值为 NaN

    我关于Python的问题真的很微不足道 我必须修改什么函数max 为任何编译器返回真实值 import numpy as np a np array 1 0 1 np nan The maximal value is 1 It is not
  • Excel VBA 中的多范围相交

    为什么这不起作用 我试图让 Excel 检查 B 列和 D 列中的任何更改 如果 B 列已更改 然后执行一些操作等 Private Sub Worksheet Change ByVal Target As Range Dim lc As L
  • 我可以使用 PHP 将 URL 变量传递给 IFrame 吗?

    我以前没有太多 或根本 使用过 PHP 我有以下代码 我认为应该可以采用 URL 变量并将其传递给 Iframe url 我的问题是 当我点击该页面时 它是打开的 而不是 http sitename com whats on ID 2 it
  • Build.scala 不是在运行中创建的

    我正在尝试学习游戏 正在做教程http www playframework com documentation 2 2 x ScalaTodoList 我遇到的问题是文件project Build scala 不是为我创建的 我应该手动创建
  • 事件触发的 Toast 通知 UWP

    想法 我正在为特定网络自动进行 wifi 登录 其中用户必须通过弹出诸如警报应用程序之类的 Toast 通知来输入凭据 但不是小睡或关闭按钮 而是登录或注销 问题 当用户连接到特定的 wifi 网络时 如何立即触发 toast 通知 您需要
  • 从 Python 调用 LibreOffice 时出错

    调用 LibreOffice 将文档转换为文本 这在 Linux 命令行中工作得很好 soffice headless convert to txt Text document to convert doc 但是当我尝试从 Python 运
  • Foreach 仅显示数组中的最后一项[重复]

    这个问题在这里已经有答案了 我试图创建一个 foreach 循环来迭代数组中的每个项目 但它只捕获最后一个项目 而不迭代第一个项目 我已经剥离了代码 仅显示相关部分 并添加了一些命令来识别问题 如上所述 message kk ll myAr
  • strip_tags() 和 mysqli_real_escape_string() 的安全性

    我正在参与一个关于信息安全的学校项目 其中一项作业是用 PHP 编写一些安全页面 我的小组中没有人了解 PHP 但这不是一个大问题 我们将学到足够的知识来创建所需的简单页面 学生助理给出的建议之一就是使用这两个函数strip tags an
  • Asp.Net MVC 5 中具有身份表和自定义表的多对多关系

    我正在尝试在 Asp Net Identity 生成的表中的用户与我自己的表之间建立关系 该关系必须是多对多 因为许多用户可以处理同一个任务 这是我的表 并且同一时间一个用户可以处理多个任务 public class Task public
  • 保持表单应用程序和 Windows 服务(或任何 n 层,实际上)之间的设置同步

    我有一个执行许多定期活动的 Windows 服务 并且我想从 Windows 窗体应用程序更改此服务的设置 不过 我不确定确保服务具有最新的用户首选项的最佳方法 运行频率 使用哪些文件夹 用户可以指定的其他内容 用户可以随时随意更改设置 我