我有一个作为服务运行的解决方案,并通过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>
非常感谢。
答案 0 :(得分:0)
我想在项目的其他部分调用回调
您可以做的是,在客户端应用程序中或您想要调用此回调的任何位置,您必须在客户端应用程序中实现回调接口。
假设 MyClient 应用程序是您要使用或调用IKioskWcfCallback的客户端或其他项目,那么
class MyClient :KioskNamespace.IKioskWcfCallback
{
//control is returned from callback to here.
public void OnCallback()
{
}
}