Ожидание завершения одностороннего вызова WCF в консольном приложении C # - PullRequest
4 голосов
/ 11 октября 2011

У меня есть веб-служба WCF (не находящаяся под моим контролем), которая реализует функциональность, к которой мне нужно получить доступ через IsOneWay = true + интерфейс обратного вызова, один из методов которого уведомляет о завершении обработки. Он был написан так, как он изначально был разработан для доступа из графического интерфейса.

Однако мне нужно получить доступ к этому же методу из консольного приложения для использования в пакете. В настоящее время мой грубый метод достижения этого состоит в том, чтобы установить флаг в false, и после вызова метода WCF я реализую цикл while с кратким вызовом Thread.Sleep (). Это, очевидно, работает, но кажется очень плохим способом достижения конечного результата.

Я бы хотел знать, как правильно это сделать. Примечание: служба находится вне моего контроля, и ссылка была только что добавлена ​​через IDE, хотя я легко могу реализовать реализацию кода и т. Д.

1 Ответ

4 голосов
/ 11 октября 2011

Используйте ManualResetEvent для ожидания завершения.Вызовите односторонний асинхронный метод в службе, а затем дождитесь объекта вручную resetevent.В вашем обратном вызове вызовите метод Set (), который позволит вашему основному потоку продолжить выполнение после вызова WaitOne () следующим образом:

var waitHandle = new ManualResetEvent();

yourwcfObject.CallTheOneWayMethod();
waitHandle.WaitOne();


void CallbackMethodRaisedByWCFService()
{
    waitHandle.Set();
}
...