【发布时间】:2017-12-06 09:56:54
【问题描述】:
我有一个作为服务运行并通过 WCF 与另一个应用程序通信的解决方案。 基本上我添加了 WCF 服务库并将服务合同定义为“CallbackContract”
[ServiceContract(CallbackContract = typeof(IKioskWcfCallback))]
public interface IKioskWcfService
{
[OperationContract]
void OpenSession();
}
public interface IKioskWcfCallback
{
[OperationContract]
void OnCallback();
}
我使用 ServiceHost 类从主项目启动 WCF 服务
Wcfservice = new ServiceHost(typeof(KioskWcf.KioskWcfService));
Wcfservice.Open();
从 WCF Web 服务内部,我可以毫无问题地调用回调。我在客户端连接时保存回调引用,稍后再调用该回调。
public class KioskWcfService : IKioskWcfService
{
public static IKioskWcfCallback Callback;
public static Timer Timer;
public void OpenSession()
{
Console.WriteLine("> Session opened at {0}", DateTime.Now);
Callback = OperationContext.Current.GetCallbackChannel<IKioskWcfCallback>();
Timer = new Timer(3000);
Timer.Elapsed += OnTimerElapsed;
Timer.Enabled = true;
}
void OnTimerElapsed(object sender, System.Timers.ElapsedEventArgs e)
{
Callback.OnCallback();
}
现在,我想在项目的其他部分调用回调,但我不知道如何引用已连接客户端的回调。
我在一些答案中看到存在 GetClients() 方法,但在我的情况下,VS 2015 不提供该方法。
这是我的 App.cfg
<service name="KioskWcf.KioskWcfService">
<endpoint address="" binding="wsDualHttpBinding" contract="KioskWcf.IKioskWcfService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8090/KioskWcf/KioskWcfService/" />
</baseAddresses>
</host>
</service>
非常感谢。
【问题讨论】: