【问题标题】:Windows services controlled with a WPF application由 WPF 应用程序控制的 Windows 服务
【发布时间】:2017-03-08 12:52:34
【问题描述】:

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

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

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

【问题讨论】:

  • 您应该寻找“动态端口”或只是向运行您的服务的用户注册一个端口,以确保只有该用户可以使用此端口。
  • 您只需要端口号还是将来服务应该获得更多信息?服务和 WPF 应用程序是否都在同一台机器上?
  • 只需要更改端口号,是的,两者都在同一台机器上。我不知道“动态端口”,所以我可以调查一下。

标签: c# wpf wcf service


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    如果您使用 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;
        }
    

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

    【讨论】:

    • 默认端口号可能是要走的路。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多