有什么方法可以将对象传递给 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/