【问题标题】:C# - How to invoke WCF callback calls from outside the serviceC# - 如何从服务外部调用 WCF 回调调用
【发布时间】: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>

非常感谢。

【问题讨论】:

    标签: c# .net wcf callback


    【解决方案1】:

    我想在项目的其他部分调用回调

    你可以做的是,在客户端应用程序中或任何你想调用这个回调的地方,那么你必须在客户端应用程序中实现回调的接口。

    假设 MyClient 应用程序是您要消费或调用 IKioskWcfCallback 的客户端或其他项目,则

    class MyClient :KioskNamespace.IKioskWcfCallback 
    {
      //control is returned from callback to here.
      public void OnCallback()
      {
    
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多