나는 서비스로 실행되며 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>
많은 감사합니다.