C# 由WPF应用程序控制的Windows服务

C# 由WPF应用程序控制的Windows服务,c#,wpf,wcf,service,C#,Wpf,Wcf,Service,我正在创建一个服务,该服务将侦听给定的端口号,直到它从另一台机器上运行的应用程序接收到信号为止。两者都将分配一个默认端口号,但我需要包括更改端口号以解决冲突的功能 我的问题是如何在没有GUI的情况下在服务中做到这一点,因此我假设我将创建一个简单的配置应用程序来更新服务正在侦听的端口号 我的问题是,促进应用程序和服务之间通信的最佳方式是什么?我读了一些关于WCF的文章。这是我需要重点研究的地方吗?您可以使用SignalR在WPF和windows服务之间进行通信。如果您使用TCP套接字进行连接,则可

我正在创建一个服务,该服务将侦听给定的端口号,直到它从另一台机器上运行的应用程序接收到信号为止。两者都将分配一个默认端口号,但我需要包括更改端口号以解决冲突的功能

我的问题是如何在没有GUI的情况下在服务中做到这一点,因此我假设我将创建一个简单的配置应用程序来更新服务正在侦听的端口号


我的问题是,促进应用程序和服务之间通信的最佳方式是什么?我读了一些关于WCF的文章。这是我需要重点研究的地方吗?

您可以使用SignalR在WPF和windows服务之间进行通信。

如果您使用TCP套接字进行连接,则可以执行以下操作:

private TcpClient GetClient()
    {
        TcpClient client = null;

        if (!string.IsNullOrEmpty(IpAddress)) // Get IpAddress from config
        {
            IPAddress ipAddress = null;
            IPAddress.TryParse(IpAddress, out ipAddress);
            if (ipAddress != null)
            {
                int intIpAddress = BitConverter.ToInt32(ipAddress.GetAddressBytes(), 0);
                IPAddress clientBindingIp = new IPAddress(BitConverter.GetBytes(intIpAddress));
                IPEndPoint endpoint = new IPEndPoint(clientBindingIp, 0); // Specify 0 for OS to automatically assign, or read from config here
                client = new TcpClient(endpoint);
            }
        }
        return client;
    }

问题是,如果您不指定端口号,那么在创建套接字时,操作系统将指定一个默认的可用端口号。或者,如果您愿意,也可以从配置中读取它。

您应该查找“动态端口”,或者只向运行您的服务的用户注册一个端口,以确保只有该用户可以使用此端口。您是否只需要端口号,或者服务将来应该获得更多信息?服务和WPF应用程序都在同一台机器上吗?只需更改端口号,是的,它们都在同一台机器上。我不知道“动态端口”,所以我可以研究它。默认端口号可能是一种方法。谢谢