【发布时间】:2023-03-18 15:19:01
【问题描述】:
我正在修改 the code in this tutorial 以构建一些基本的订阅推送 wcf 客户端/服务器类,但我只是碰了壁。
本教程中的服务器类是使用以下代码创建的:
class Program
{
static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(
typeof(StringReverser),
new Uri[]{
new Uri("net.pipe://localhost")
}))
{
host.AddServiceEndpoint(typeof(IStringReverser),
new NetNamedPipeBinding(),
"PipeReverse");
host.Open();
Console.WriteLine("Service is available. " +
"Press <ENTER> to exit.");
Console.ReadLine();
host.Close();
}
}
}
我假设发布了一个 StringReverser 的实例,我的问题是我需要对该实例的引用,以便我可以在其上调用一个方法将数据推送回客户端。
在本教程中,服务器只是使用回调方法回复客户端,而不是将对客户端的引用存储在订阅者列表中。当我需要将数据推送回客户端时,我需要一个对 Service 对象的引用,以便我可以实际使用回调。
有没有办法使用 WCF 发布服务,让您可以引用服务对象?或者我可以从 host 对象中获取对服务对象的引用吗?
任何帮助将不胜感激......
【问题讨论】:
-
当您说“主机”对象时,您是指服务实现吗?您究竟需要在哪里引用它?
-
我需要从发布服务的代码中引用服务实现。这样我就可以定期调用它的方法来向任何订阅了数据的客户端发送数据。
-
基本上上面的 Main 方法会在 dataPropogator 类的构造函数中,服务实现通过 wcf 接受订阅调用,并且当调用 dataPropogator calss 上的方法时,它会向所有订阅者发送数据.我需要一个对服务对象的引用来做回调