0

我们最近尝试在我们的项目中使用 XML-RPC.Net 库。服务器(.Net Remoting)和客户端都是根据我们在http://xml-rpc.net/上找到的说明制作的。

连接已经建立,我们从服务器获取数据等等。

正如标题所述,现在,我们想知道如何使在第一次客户端调用之后创建的 XML-RPC 服务器实例能够向 WPF UI 提供反馈。我们想要完成的是在服务器属性上注册一个事件,以便调用可以到达 UI 线程。

我们对这方面的任何建议持开放态度。

这是在服务器端注册频道的代码:

IDictionary props = new Hashtable();
props["name"] = "SubsetHttpChannel";
props["port"] = 5678;
channel = new System.Runtime.Remoting.Channels.Http.HttpChannel(
           props,
           null,
           new XmlRpcServerFormatterSinkProvider()
        );
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType( typeof(SubsetServer), "subsetserver.rem", WellKnownObjectMode.Singleton);

这是显示在 UI 上创建 Server 实例后我们希望如何设置属性的代码:

Server = new SubsetServer(); 
Server.Machine.OnChangeState += delegate(State actual, State next, Event pEvent)
        {
            uiWindowInstance.PostMessage(string.Format("Subset Server: {0} -> {1}", actual.Name, next.Name));
};

使用的技术:VS2012、WPF 4.5 和 XML-RPC.NET 2.5.0

提前致谢

4

1 回答 1

0

感谢任何花时间阅读并尝试回答的人。

我找到了一个适合我的解决方案。我想与您分享它,希望有人可以提供任何提示,这是否是一个可能在未来产生问题的解决方案。

经过分析,我发现两个服务器实例运行在同一个进程中。所以我在我的服务器中创建了一个单例作为属性。

我已经把我需要的任何东西放在了单例中,所以对于我想在我的问题中使用的代表,现在的代码是:

Server = new SubsetServer();
Server.**singleton**.Machine.OnChangeState += delegate(State actual, State next, Event pEvent)
        {
            uiWindowInstance.PostMessage(string.Format("Subset Server: {0} -> {1}", actual.Name, next.Name));
        };

希望这对其他人有帮助。如果您发现任何缺陷,请发表评论。

于 2014-01-20T10:21:14.953 回答