2017-12-06 19 views
0

나는 서비스로 실행되며 WCF를 통해 다른 응용 프로그램과 통신하는 솔루션이 있습니다. 는 기본적으로 나는 WCF 서비스 라이브러리를 추가 - 서비스 외부에서 WCF 콜백 호출을 호출하는 방법

[ServiceContract(CallbackContract = typeof(IKioskWcfCallback))] 
public interface IKioskWcfService 
{ 
    [OperationContract] 
    void OpenSession(); 
} 

public interface IKioskWcfCallback 
{ 

    [OperationContract] 
    void OnCallback(); 
} 

내가 WCF 웹 서비스 나 내부에서 클래스 ServiceHost를

 Wcfservice = new ServiceHost(typeof(KioskWcf.KioskWcfService)); 
     Wcfservice.Open(); 

를 사용하여 주요 프로젝트에서 WCF 서비스를 시작 "CallbackContract"로 서비스 계약을 정의 아무런 문제없이 콜백을 부를 수 있습니다. 클라이언트가 연결되고 나중에 콜백을 호출 할 때 콜백 참조를 저장합니다.

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

나는 클라이언트 응용 프로그램에서, 내 프로젝트 당신이 할 수있는 일

가의 다른 부분에 콜백을 호출하고 싶은 또는이 콜백을 호출 할 때마다, 당신은이 클라이언트 응용 프로그램에서 콜백의 인터페이스를 구현합니다.

한다고 가정 하여 MyClient 응용 프로그램은,

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

    } 
} 
당신이 IKioskWcfCallback를 소비하거나 통화 할 클라이언트 또는 다른 프로젝트입니다