如何将更新从服务器发送到客户端? - c#

我正在建立一个C#/ WPF项目。
它的架构是这样的:

一个控制台应用程序,它将位于服务器端的虚拟机(或我的家用计算机)上。
一个将成为客户端应用程序的wpf应用程序。

现在我的问题是-我希望服务器能够将更改发送到客户端。例如,如果我对客户端ABC进行了更改,则希望服务器知道如何在客户端计算机上调用服务。
问题是,我不知道服务器将如何调用客户端。

一个小例子,以防我不能很好地解释它:
该服务器在计算机1上,并且在计算机2和3上有两个客户端。
客户2有一辆丰田汽车,客户3有一辆宝马汽车。
计算机1上的服务器想告诉客户端2它有一辆新车,即Avenger。

如何在客户端上保持跟踪和呼叫服务?
我想到了将其IP地址(通过从cmd调用ipconfig)保存在数据库中-但这不是基于它们所连接的WI-FI /网络吗?

谢谢你的帮助!

参考方案

您可以尝试实现SignalR。这是一个很棒的库,它使用Web套接字将数据推送到客户端。

编辑:

SignalR允许您在WPF应用程序(客户端)可以连接到的控制台应用程序(服务器)上设置集线器,从而帮助您解决问题。客户端启动时,您将使用指定的集线器注册它们。当服务器上发生某些更改时,可以将其从服务器集线器推送到客户端。客户端将从服务器接收信息,并允许您根据需要进行处理。

一些代码的粗略模型:

namepsace Server{}
    public class YourHub : Hub {
        public void SomeHubMethod(string userName) { 
            //clientMethodToCall is a method in the WPF application that
            //will be called. Client needs to be registered to hub first.
            Clients.User(userName).clientMethodToCall("This is a test.");

           //One issue you may face is mapping client connections.
           //There are a couple different ways/methodologies to do this.
           //Just figure what will work best for you.
         }
    }
}

namespace Client{
    public class HubService{          

      public IHubProxy CreateHubProxy(){
          var hubConnection = new HubConnection("http://serverAddress:serverPort/");
          IHubProxy yourHubProxy = hubConnection.CreateHubProxy("YourHub");
          return yourHubProxy;
        }
    }

}

然后在您的WPF窗口中:

var hubService = new HubService();
var yourHubProxy = hubService.CreateHubProxy();
yourHubProxy.Start().Wait();
yourHubProxy.On("clientMethodToCall", () => DoSometingWithServerData());

WPF-将窗口大小设置为子用户控件大小 - c#

我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…

当回复有时是一个对象有时是一个数组时,如何在使用改造时解析JSON回复? - java

我正在使用Retrofit来获取JSON答复。这是我实施的一部分-@GET("/api/report/list") Observable<Bills> listBill(@Query("employee_id") String employeeID); 而条例草案类是-public static class…

改造正在返回一个空的响应主体 - java

我正在尝试使用Retrofit和Gson解析一些JSON。但是,我得到的响应机构是空的。当我尝试从对象中打印信息时,出现NullPointerException。我确保URL正确,并且我也确保POJO也正确。我正在使用jsonschema2pojo来帮助创建POJO类。这是我要解析的JSON{ "?xml": { "@versi…

WPF WebBrowser甚至使用ObjectForScripting在单独的线程上锁定UI - javascript

在与WPF Web浏览器控件绑定的ObjectForScripting上调用方法时,网页UI锁定会出现一个奇怪的问题。进一步的研究使我们意识到整个UI(包括WPF应用程序而不是WebBrowser)都已锁定。使用的技术是带有Caliburn.Micro和Autofac的WPF。我在COM可见类上使用方法来推送到Caliburn.Micro提供的事件聚合器。进…

WPF MVVM中的动态TabControl - c#

我几周前开始使用WPF(在C#中),现在我需要一些高级帮助来使用tabcontrol。首先,我正在使用MVVM(模型视图ViewModel)模式来设计我的应用程序,并且我有一个约束,即试图不要在文件(初始化xaml文件)后面的代码中添加代码。现在,我的问题是在MainWindow视图(窗口)中动态创建新的tabItem,当单击按钮(例如“新建选项卡”按钮)时…