c# - 将对象作为参数传递给 Windows 服务

标签 c# windows service

有什么方法可以将对象传递给 Windows 服务吗?我知道方法 myServiceController.Star(string[] arg) 但我需要传递比字符串数组更复杂的对象。 实际上,我不需要将对象作为参数传递,我真正需要的是该服务可以使用在 Windows 窗体应用程序中创建的对象。我试过使用 System.Web.Script.Serialization.JavaScriptSerializer.Serialize 方法将对象转换为 Json,但我不能,因为该对象包含循环引用。我也试过 使用指针,但我不能,因为它是一个托管类型对象。

知道我能做什么吗?

最佳答案

与其尝试传递对象 itslef(这将不起作用,因为服务在单独的进程中执行),不如传递对数据的外部引用。例如,包含序列化对象的文件的路径。

我假设您的服务也在 .NET 中实现?如果是,则使用二进制序列化 (BinaryFormatter),因为这将处理循环引用。然后,您可以通过从命名文件加载来在您的服务中反序列化。

您可能想考虑如果用户重新启动您的服务会发生什么情况 - 在这种情况下它从哪里获取数据?将没有启动参数。使用注册表来存储序列化对象的文件名并在启动时从中读取您的服务可能更可靠。然后即使在没有启动参数的情况下调用它也会始终找到数据,例如机器重新启动或用户重新启动服务的情况。

关于c# - 将对象作为参数传递给 Windows 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2900722/

相关文章:

c# - 是否有 WebDriver Navigated 事件?

c++ - MSVC2013 和 MingW 之间的差异导致最令人烦恼的解析问题

java - 以设定的时间间隔执行方法的最有效方法?

android - 将服务绑定(bind)到 Android 中的 Activity

c# - 使用反射获取带有参数的静态方法

c# - 找不到查询 'Select' 的实现未找到

c# - 用于输入验证的正则表达式白名单 - 重音不敏感

c - FreeLibrary 在 VC14 上泄漏,但在 VC9 上没有泄漏

python - Windows 上是否有 time.clock() 的替代精确计时器?

java - Android 健壮的线程架构?异步任务与线程/处理程序与服务/线程