2016-02-03 3 views
0

У меня есть приложение Silverlight, которое вызывает службу WCF (полный дуплекс), которая размещается на другом веб-сайте (оба моих создания, как я могу изменить).Как сохранить работу службы WCF после клиента Отключить?

Система работает нормально, но эта служба WCF занимает много времени (иногда более 8 минут).

Я хочу, чтобы пользователь мог закрыть приложение до завершения обслуживания и получить доступ к результатам позже, когда он снова откроет приложение. То же самое, если интернет вышел или сеанс истекает.

Мой план состоял в том, чтобы сохранить все данные, полученные службой, в таблицу, и когда пользователь снова войдет в систему, я смог проверить содержимое этой таблицы и показать ее ему.

Проблема заключается в том, что при закрытии приложения (например, закрытии браузера) служба продолжает работать некоторое время, а затем закрывается перед завершением. Я знаю, потому что я регистрировал прогресс в таблице DB. Я закрываю браузер, когда услуга составляет 30%. Он продолжал работать до 50%, а затем остановился.

Вопрос: Как я могу сохранить сервис, выполняющийся на сервере, если клиент отключается по какой-либо причине?

ответ

0

Я не думаю, что ваш вопрос не имеет отношения к wcf. Это ситуация, когда вам нужно запустить метод асинхронно.

Итак, сначала создайте класс для вашего wcf-клиента.

public class MyClient 
{ 
    public void AsyncWcfCall(param1, param2) 
    { 
     Task.Run(() => DoCall(param1, param2)); 
    } 

    private void DoCall(param1,param2) 
    { 
     using(var cleint = new MyWcfService()) 
     { 
      //call the service, save to database etc.. and handle exceptions 
     } 
    } 
} 

Теперь из вашей модели ViewModel создайте экземпляр вышеуказанного класса и просто вызовите AsyncWcfCall.

+0

Но проблема в том, когда клиент закрывается. В вашем примере метод DoCall по-прежнему будет находиться на клиенте и будет закрыт при закрытии браузера. – Marlon

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