2011-10-11 6 views
4

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

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

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

ответ

4

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

var waitHandle = new ManualResetEvent(); 

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


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

@anonymouse: И смотреть на [перегрузках 'ManualResetEvent.WaitOne'] (HTTP: //msdn.microsoft.com/de-de/library/57deze2z.aspx). Вы даже можете установить тайм-аут, чтобы ваше приложение не ожидало навсегда в случае ошибок. – Stephan

 Смежные вопросы

  • Нет связанных вопросов^_^