Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用XML在服务和表单之间正确通信_C#_Xml_Winforms_Service - Fatal编程技术网

C# 如何使用XML在服务和表单之间正确通信

C# 如何使用XML在服务和表单之间正确通信,c#,xml,winforms,service,C#,Xml,Winforms,Service,所以我安装了一个有服务和表单的项目。该服务加载表单创建的XML文件。问题在于,服务路径和表单AppData在使用时是不同的 Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) 我必须在用户帐户而不是本地系统上安装服务。我注意到大多数服务都是作为本地系统安装的。这将如何影响服务的性能,或者是否有更好的方法来解决这一问题?您的问题过于宽泛。有很多方法可以处理您的场景。也就是说,既然您已经有了一个实现,我们可以对其

所以我安装了一个有服务和表单的项目。该服务加载表单创建的XML文件。问题在于,服务路径和表单AppData在使用时是不同的

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

我必须在用户帐户而不是本地系统上安装服务。我注意到大多数服务都是作为本地系统安装的。这将如何影响服务的性能,或者是否有更好的方法来解决这一问题?

您的问题过于宽泛。有很多方法可以处理您的场景。也就是说,既然您已经有了一个实现,我们可以对其进行评论,以解决您问题的具体部分

首先,假设服务在该帐户下能够正常运行,那么作为普通用户运行应该没问题。这并不理想,但不应该真的伤害任何东西。通常,服务需要提升权限,这就是为什么它首先是一个服务,以及为什么它作为本地系统或本地服务帐户运行。但是,如果您的服务不需要这些特权,那么使用用户帐户就可以了

也就是说,根据您的描述,GUI程序似乎通过将XML文件写入服务监视和读取的特定位置来控制服务。使用文件系统作为进程间通信(IPC)的一种形式本身并不理想,我建议采用另一种方法

由于您已经有了基于XML的I/O,我建议使用命名管道或其他基于网络/套接字的IPC。您可以将流对象(例如,
PipeStream
NetworkStream
)包装在
StreamWriter
StreamReader
中,然后使用您已经使用的普通XML内容进行相应的读写

另一种选择是WCF。这里有一个学习曲线,您对用于传输数据的精确序列化的控制也少了一点,但好处是,有了Visual Studio的支持,您实现XML/序列化方面的时间就少了,只需在Visual Studio中添加新的客户机,就可以为服务创建新的客户机。IDE将创建连接到服务所需的数据结构和配置


在任何一种情况下,您都可以在本地系统帐户下运行服务,这是一种典型的服务,您所询问的问题就会消失。:)

系统没有环境,因此没有文件夹的路径。我认为正常的过程是将项目放在管理员帐户中,然后作为管理员运行。作为用户帐户运行是等效的,但是用户将有权修改(除非您是用户)。性能取决于设置服务的优先级。通常,作为系统服务运行的服务设置为以正常优先级运行,因此不会影响操作系统性能。因此,任何服务的优先级都应该根据其要求进行设置。