Ожидание завершения одностороннего вызова WCF в консольном приложении C#
У меня есть веб-служба WCF (не находящаяся под моим контролем), которая реализует функциональность, к которой мне нужно получить доступ через IsOneWay = true + интерфейс обратного вызова, один из методов которого уведомляет о завершении обработки. Он был написан так, как он изначально был разработан для доступа из графического интерфейса.
Однако мне нужно получить доступ к этому же методу из консольного приложения для использования в пакете. В настоящее время мой грубый метод достижения этого состоит в том, чтобы установить флаг в false, и после вызова метода WCF я реализую цикл while с кратким вызовом Thread.Sleep(). Это, очевидно, работает, но кажется плохим способом достижения конечного результата.
Я хотел бы знать, каков правильный способ сделать это. Примечание: служба находится вне моего контроля, и ссылка была только что добавлена через IDE, хотя я легко могу реализовать реализацию кода и т. Д.
1 ответ
Используйте ManualResetEvent для ожидания завершения. Вызовите односторонний асинхронный метод в службе, а затем дождитесь объекта вручную resetevent. В вашем обратном вызове вызовите метод Set(), который позволит вашему основному потоку продолжить выполнение после вызова WaitOne() следующим образом:
var waitHandle = new ManualResetEvent();
yourwcfObject.CallTheOneWayMethod();
waitHandle.WaitOne();
void CallbackMethodRaisedByWCFService()
{
waitHandle.Set();
}